GIFAPI.H
上传用户:gzboli
上传日期:2013-04-10
资源大小:471k
文件大小:3k
源码类别:

图片显示

开发平台:

Visual C++

  1. #include "..DIBAPI.h"
  2. const int MAXCOLORMAPSIZE = 256;
  3. typedef struct tagGIFHEADER
  4. {
  5. BYTE bySignature[3];
  6. BYTE byVersion[3];
  7. }  GIFHEADER;
  8. typedef struct tagGIFSCRDESC
  9. {
  10. WORD wWidth;
  11. WORD wDepth;
  12. struct tagGlobalFlag
  13. {
  14. BYTE PalBits   : 3;
  15. BYTE SortFlag  : 1;
  16. BYTE ColorRes  : 3;
  17. BYTE GlobalPal : 1;
  18. }  GlobalFlag;
  19. BYTE byBackground;
  20. BYTE byAspect;
  21. }  GIFSCRDESC;
  22. typedef struct tagGIFIMAGE
  23. {
  24. WORD wLeft;
  25. WORD wTop;
  26. WORD wWidth;
  27. WORD wDepth;
  28. struct tagLocalFlag
  29. {
  30. BYTE PalBits   : 3;
  31. BYTE Reserved  : 2;
  32. BYTE SortFlag  : 1;
  33. BYTE Interlace : 1;
  34. BYTE LocalPal  : 1;
  35. }  LocalFlag;
  36. }  GIFIMAGE;
  37. typedef struct tagGIFCONTROL
  38. {
  39. BYTE byBlockSize;
  40. struct tagFlag
  41. {
  42. BYTE Transparency   : 1;
  43. BYTE UserInput      : 1;
  44. BYTE DisposalMethod : 3;
  45. BYTE Reserved       : 3;
  46. }  Flag;
  47. WORD wDelayTime;
  48. BYTE byTransparencyIndex;
  49. BYTE byTerminator;
  50. }  GIFCONTROL;
  51. typedef struct tagGIFPLAINTEXT
  52. {
  53. BYTE byBlockSize;
  54. WORD wTextGridLeft;
  55. WORD wTextGridTop;
  56. WORD wTextGridWidth;
  57. WORD wTextGridDepth;
  58. BYTE byCharCellWidth;
  59. BYTE byCharCellDepth;
  60. BYTE byForeColorIndex;
  61. BYTE byBackColorIndex;
  62. }  GIFPLAINTEXT;
  63. typedef struct tagGIFAPPLICATION
  64. {
  65. BYTE byBlockSize;
  66. BYTE byIdentifier[8];
  67. BYTE byAuthentication[3];
  68. }  GIFAPPLICATION;
  69. typedef struct tagGIFDATAPARAM
  70. {
  71. LPSTR lpDataBuff;
  72. LPSTR lpBgnBuff;
  73. LPSTR lpEndBuff;
  74. DWORD dwDataLen;
  75. WORD  wMemLen;
  76. WORD  wWidth;
  77. WORD  wDepth;
  78. WORD  wLineBytes;
  79. WORD  wBits;
  80. BOOL  bEOF;
  81. BOOL  bInterlace;
  82. }  GIFDATAPARAM;
  83. typedef GIFDATAPARAM FAR *LPGIFDATAPARAM;
  84. typedef struct tagGIFCONTROLPARAM
  85.    {
  86.       LPSTR lpDataBuff;
  87.       LPSTR lpEndBuff;
  88.       DWORD dwTempCode;
  89.       WORD  wWidth;
  90.       WORD  wDepth;
  91.       WORD  wLineBytes;
  92.       WORD  wBits;
  93.       WORD  wByteCnt;
  94.       WORD  wBlockNdx;
  95.       BYTE  byLeftBits;
  96.    }  GIFCONTROLPARAM;
  97. typedef GIFCONTROLPARAM FAR *LPGIFCONTROLPARAM;
  98. // 宏运算
  99. #define DWORD_WBYTES(x)         ( (((x) + 31UL) >> 5) << 2 )
  100. #define WORD_WBYTES(x)          ( (((x) + 15UL) >> 4) << 1 )
  101. #define BYTE_WBYTES(x)          (  ((x) +  7UL) >> 3       )
  102. //常量
  103. #define MAX_BUFF_SIZE 32768 /* 32K */
  104. #define MAX_HASH_SIZE           5051
  105. #define MAX_TABLE_SIZE          4096 /* 12-bit */
  106. #define MAX_SUBBLOCK_SIZE       255
  107. // 函数原型
  108. BOOL SaveGIF(LPCSTR lpszFileName, LPSTR lpDIB, BOOL bInterlace);
  109. void EncodeGIF(CFile& file, LPSTR lpDIBBits, 
  110.   LPGIFCONTROLPARAM lpGIFControlParam,
  111.   WORD wWidthBytes, BOOL bInterlace);
  112. void WriteCodeGIF(CFile& file, WORD wCode, LPSTR lpSubBlock,
  113.   LPBYTE lpbyCurrentBits, LPGIFCONTROLPARAM lpGIFControlParam);
  114. HDIB ReadGIF(LPCSTR lpszFileName);
  115. void ReadSrcDataGIF(CFile& file, LPWORD lpwMemLen, LPDWORD lpdwDataLen,
  116.                     LPSTR lpSrcBuff, LPBOOL lpbEOF);
  117. void DecodeGIF(CFile& file, LPSTR lpDIBBits,
  118.   LPGIFDATAPARAM lpGIFDataParam,WORD wWidthBytes);