Gif.h
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:5k
源码类别:

图形图象

开发平台:

Visual C++

  1. // Gif.h: interface for the CGif class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_GIF_H__3F3EB142_198E_11D3_ABDA_0000E81A9AA8__INCLUDED_)
  5. #define AFX_GIF_H__3F3EB142_198E_11D3_ABDA_0000E81A9AA8__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. //-----------start define
  10. #define WIDTHBYTES(bits)    (((bits) + 31) / 32 * 4)
  11. typedef unsigned char UCHAR;
  12. typedef UCHAR *   LPUSTR;
  13. typedef unsigned short USHORT;
  14. class GIFINFO
  15. {
  16. public:
  17. USHORT FileType;//89a or 87a 
  18. USHORT ColorType;//1,2,4,8,16,32,64,128,256
  19. USHORT ColorMode;//1,2,3,4,5,6,7,8
  20. USHORT Width;
  21. USHORT Height;
  22. USHORT FrameCount;//共有几幅图 //UINT           DataOffset[100];//小於FrameCount有效 ,包括补充区及数据区
  23. UCHAR  InitPixelBits;//压缩数据起始数据Bits位数
  24. };
  25. class MYRGB
  26. {
  27. public:
  28. BYTE bRed;
  29. BYTE bGreen;
  30. BYTE bBlue;
  31. };
  32. class BMPIMAGE
  33. {
  34. public:
  35. BMPIMAGE();
  36. virtual ~BMPIMAGE();
  37. short tColor;
  38. USHORT DelayTime;
  39. USHORT Left;
  40. USHORT Top;
  41. USHORT Width;
  42. USHORT Height;
  43. RGBQUAD    Palette[256];
  44.     LPUSTR         pImageData;
  45. BOOL   SaveMode;//1 = normal; 0 = 交叉
  46. };
  47. //------------------------------------------------------
  48. class GIFHEADER//GIF 文件头
  49. {
  50. public:
  51. UCHAR Signature[6];//图像格式,版本
  52. USHORT ScreenWidth;//图像宽度
  53. USHORT ScreenDepth;//图像高度
  54. UCHAR GlobalFlagByte;//全局标记 a0 -- a7 有含意
  55. UCHAR BackGroundColor;//背景色
  56. UCHAR AspectRadio;//89a版的长宽比
  57. };
  58. class IMAGEDATAINFO//图像数据区识别信息
  59. {
  60. public:
  61. UCHAR ImageLabel;// default 0x2c
  62. USHORT ImageLeft; 
  63. USHORT  ImageTop;
  64. USHORT  ImageWidth;
  65. USHORT  ImageHeight;
  66. UCHAR  LocalFlagByte; 
  67. };
  68. class LZWTABLE
  69. {
  70. public:
  71. USHORT Header;
  72. USHORT Tail;
  73. USHORT Code; 
  74. };
  75. //below only for 89a
  76. class GRAPHCTRL
  77. {
  78. public:
  79. UCHAR ExtIntr;// 0x21
  80. UCHAR Label;//0xF9
  81. UCHAR BlockSize;//0x04
  82. UCHAR PackedField;
  83. USHORT          DelayTime;
  84. UCHAR TranColorIndex;
  85. UCHAR blockTerminator;//0x00
  86. };
  87. class NOTEHCTRL
  88. {
  89. public:
  90. UCHAR ExtIntr;// 0x21
  91. UCHAR Label;//0xFE
  92. UCHAR Data[256];//变长最大256
  93. UCHAR blockTerminator;//0x00
  94. };
  95. class TEXTCTRL
  96. {
  97. public:
  98. UCHAR ExtIntr;// 0x21
  99. UCHAR Label;//0x01
  100. UCHAR BlockSize;//0x0c
  101. USHORT          Left;
  102. USHORT          Top;
  103. USHORT          Width;
  104. USHORT          Height; 
  105. UCHAR ForeColorIndex;
  106. UCHAR BkColorIndex;
  107. char   Data[256];//变长最大256
  108. UCHAR blockTerminator;//0x00
  109. };
  110. class APPCTRL
  111. {
  112. public:
  113. UCHAR ExtIntr;// 0x21
  114. UCHAR Label;//0xFF
  115. UCHAR BlockSize;//0x0b
  116. UCHAR Identifier[8];
  117. UCHAR Authentication[3];
  118. UCHAR Data[256];//变长最大256
  119. UCHAR blockTerminator;//0x00
  120. };
  121. //-----------------------------
  122. class CGIF  
  123. {
  124. public:
  125. BOOL GetImageInfo(RECT &Rect,COLORREF &tColor ,UINT ImageNo = 0);
  126. BOOL ShowImage(HDC hDC,POINT StartPos,UINT ImageNo = 0);
  127. BOOL LoadGIF(LPCTSTR GifFileName);
  128. CGIF();
  129. virtual ~CGIF();
  130. private:
  131. BOOL ConvertToBmpImage(LPUSTR SrcData);
  132. BOOL SaveBmp(LPCTSTR BmpFileName,LPUSTR pData);
  133. UINT GetImage(LPUSTR pData);
  134. UINT GetNoteContent(LPUSTR pNote);
  135. UINT GetAppContent(LPUSTR pApp);
  136. UINT ShowText(LPUSTR pText);
  137. UINT GetGrphContent(LPUSTR pGrCtrl);
  138. UINT AnalizeFileHeader(LPUSTR pFileContent);
  139. //从字符串中任意字节的某个Bits开始取若干bits,并返回结果
  140. USHORT GetOneCode(LPUSTR CodeStr ,UINT CodeStrLen, UINT OffsetChar , UINT OffsetBits, UINT Length);
  141. //当某指针指向文件中压缩数据前位置时,取得当前数据区中压缩数据所占字节数
  142. UINT GetCodeCountOnChar (LPUSTR CodeStr ,UINT &AllDataLen);
  143. //当某指针指向文件中压缩数据前位置时,取得当前数据区中压缩数据
  144. LPUSTR GetCodeDataOnChar (LPUSTR CodeStr);
  145. //把压缩数据解於USHORT * 中,
  146. LPUSTR GetCodeDataOnBits (LPUSTR CodeDataStr,UINT InitLen ,UINT &CodeDataLen);
  147. //得到部份真实数据
  148. void  GetPartImageDataFromTable(LPUSTR &pImage,LZWTABLE * Table,UINT TableLen);
  149. //API end
  150. GIFINFO m_GifInfo;
  151. LPUSTR   m_pDataArea;
  152. LZWTABLE LZWTable[5200];
  153. CPtrList m_ImageList;
  154. RGBQUAD m_CurRgbQuad[256];//Bitmap pal;
  155. short   m_CurTColorIndex;
  156. USHORT  m_CurDelayTime;
  157. BOOL    m_CurSaveMode;
  158. USHORT  m_CurX,m_CurY,m_CurWidth,m_CurHeight;
  159. };
  160. BOOL BitBltEx(
  161.   HDC hdcDest, // handle to destination device context
  162.   int nXDest,  // x-coordinate of destination rectangle's upper-left 
  163.                // corner
  164.   int nYDest,  // y-coordinate of destination rectangle's upper-left 
  165.                // corner
  166.   int nWidth,  // width of destination rectangle
  167.   int nHeight, // height of destination rectangle
  168.   HDC hdcSrc,  // handle to source device context
  169.   int nXSrc,   // x-coordinate of source rectangle's upper-left 
  170.                // corner
  171.   int nYSrc,   // y-coordinate of source rectangle's upper-left 
  172.   COLORREF cTransparentColor      // corner
  173.    // raster operation code
  174. );
  175. #endif // !defined(AFX_GIF_H__3F3EB142_198E_11D3_ABDA_0000E81A9AA8__INCLUDED_)