il_header.c
Upload User: wmy0603
Upload Date: 2022-05-02
Package Size: 1808k
Code Size: 4k
Development Platform:

Visual C++

  1. //-----------------------------------------------------------------------------
  2. //
  3. // ImageLib Sources
  4. // Copyright (C) 2000-2008 by Denton Woods
  5. // Last modified: 10/10/2006
  6. //
  7. // Filename: src-IL/src/il_header.c
  8. //
  9. // Description: Generates a C-style header file for the current image.
  10. //
  11. //-----------------------------------------------------------------------------
  12. #ifndef IL_NO_CHEAD
  13. #include "il_internal.h"
  14. // Just a guess...let's see what's purty!
  15. #define MAX_LINE_WIDTH 14
  16. //! Generates a C-style header file for the current image.
  17. ILboolean ilSave_CHEAD(ILconst_string FileName)
  18. {
  19. FILE *HeadFile;
  20. ILuint i = 0, j;
  21. ILimage *TempImage;
  22. const char *Name;
  23. if (iCurImage == NULL) {
  24. ilSetError(IL_ILLEGAL_OPERATION);
  25. return IL_FALSE;
  26. }
  27. Name = iGetString(IL_CHEAD_HEADER_STRING);
  28. if (Name == NULL)
  29. {
  30. ilSetError(IL_INVALID_VALUE);
  31. return IL_FALSE;
  32. }
  33. if (FileName == NULL || Name == NULL ||
  34. ilStrLen(FileName) < 1 || ilCharStrLen(Name) < 1) {
  35. ilSetError(IL_INVALID_VALUE);
  36. return IL_FALSE;
  37. }
  38. if (!iCheckExtension(FileName, IL_TEXT("h"))) {
  39. ilSetError(IL_INVALID_EXTENSION);
  40. return IL_FALSE;
  41. }
  42. if (ilGetBoolean(IL_FILE_MODE) == IL_FALSE) {
  43. if (iFileExists(FileName)) {
  44. ilSetError(IL_FILE_ALREADY_EXISTS);
  45.             return IL_FALSE;
  46. }
  47. }
  48. if (iCurImage->Bpc > 1) {
  49. TempImage = iConvertImage(iCurImage, iCurImage->Format, IL_UNSIGNED_BYTE);
  50. if (TempImage == NULL)
  51.            return IL_FALSE;
  52. } else {
  53. TempImage = iCurImage;
  54. }
  55. #ifndef _UNICODE
  56. HeadFile = fopen(FileName, "wb");
  57. #else
  58. #ifdef _WIN32
  59. HeadFile = _wfopen(FileName, L"rb");
  60. #else
  61. HeadFile = fopen((char*)FileName, "rb");
  62. #endif
  63. #endif//_UNICODE
  64. if (HeadFile == NULL) {
  65. ilSetError(IL_COULD_NOT_OPEN_FILE);
  66.         return IL_FALSE;
  67. }
  68. fprintf(HeadFile, "//#include <il/il.h>n");
  69. fprintf(HeadFile, "// C Image Header:nnn");
  70. fprintf(HeadFile, "// IMAGE_BPP is in bytes per pixel, *not* bitsn");
  71.     fprintf(HeadFile, "#define IMAGE_BPP %dn",iCurImage->Bpp);
  72. fprintf(HeadFile, "#define IMAGE_WIDTH   %dn", iCurImage->Width);
  73. fprintf(HeadFile, "#define IMAGE_HEIGHT  %dn", iCurImage->Height);
  74. fprintf(HeadFile, "#define IMAGE_DEPTH   %dnnn", iCurImage->Depth);
  75. fprintf(HeadFile, "#define IMAGE_TYPE    0x%Xn", iCurImage->Type);
  76. fprintf(HeadFile, "#define IMAGE_FORMAT  0x%Xnnn", iCurImage->Format);
  77.     fprintf(HeadFile, "ILubyte %s[] = {n", Name);
  78.         
  79. for (; i < TempImage->SizeOfData; i += MAX_LINE_WIDTH) {
  80. fprintf(HeadFile, "t");
  81. for (j = 0; j < MAX_LINE_WIDTH; j++) {
  82. if (i + j >= TempImage->SizeOfData - 1) {
  83. fprintf(HeadFile, "%4d", TempImage->Data[i+j]);
  84. break;
  85. }
  86. else
  87. fprintf(HeadFile, "%4d,", TempImage->Data[i+j]);
  88. }
  89. fprintf(HeadFile, "n");
  90. }
  91. if (TempImage != iCurImage)
  92. ilCloseImage(TempImage);
  93. fprintf(HeadFile, "};n");
  94. if (iCurImage->Pal.Palette && iCurImage->Pal.PalSize && iCurImage->Pal.PalType != IL_PAL_NONE) {
  95. fprintf(HeadFile, "nn");
  96. fprintf(HeadFile, "#define IMAGE_PALSIZE %unn", iCurImage->Pal.PalSize);
  97. fprintf(HeadFile, "#define IMAGE_PALTYPE 0x%Xnn", iCurImage->Pal.PalType);
  98.         fprintf(HeadFile, "ILubyte %sPal[] = {n", Name);
  99. for (i = 0; i < iCurImage->Pal.PalSize; i += MAX_LINE_WIDTH) {
  100. fprintf(HeadFile, "t");
  101. for (j = 0; j < MAX_LINE_WIDTH; j++) {
  102. if (i + j >= iCurImage->Pal.PalSize - 1) {
  103. fprintf(HeadFile, " %4d", iCurImage->Pal.Palette[i+j]);
  104. break;
  105. }
  106. else
  107. fprintf(HeadFile, " %4d,", iCurImage->Pal.Palette[i+j]);
  108. }
  109. fprintf(HeadFile, "n");
  110. }
  111. fprintf(HeadFile, "};n");
  112. }
  113. fclose(HeadFile);
  114. return IL_TRUE;
  115. }
  116. #endif//IL_NO_CHEAD