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

图形图象

开发平台:

Visual C++

  1. // GifModule.h : main header file for the GIFMODULE DLL
  2. //
  3. #if !defined(AFX_GIFMODULE_H__C03B0E49_460A_11D4_8853_C6A14464AE19__INCLUDED_)
  4. #define AFX_GIFMODULE_H__C03B0E49_460A_11D4_8853_C6A14464AE19__INCLUDED_
  5. #if _MSC_VER > 1000
  6. #pragma once
  7. #endif // _MSC_VER > 1000
  8. #ifndef __AFXWIN_H__
  9. #error include 'stdafx.h' before including this file for PCH
  10. #endif
  11. #include "resource.h" // main symbols
  12. #include "..publicgol_isee.h" // 此文件定义了接口数据包
  13. // 扫描行尺寸
  14. #define WIDTHBYTES(bits)    ((((bits)+31)>>5)<<2)
  15. // 进度总尺寸
  16. #define RWPROGRESSSIZE 100
  17. // 目标图位深度格式
  18. enum DESFORMAT
  19. {
  20. DF_NULL, // 无效的目标格式
  21. DF_16_555, // 16位555格式(也就是15位图像)
  22. DF_16_565, // 16位565格式
  23. DF_24, // 24位格式
  24. DF_32, // 32位格式
  25. DF_MAX // 有效值边界
  26. };
  27. // GIF版本标识串长度
  28. #define GIFVERSIZE 6
  29. struct _tagGIFHEADER;
  30. typedef struct _tagGIFHEADER GIFHEADER;
  31. typedef struct _tagGIFHEADER *LPGIFHEADER;
  32. struct _tagGIFINFO;
  33. typedef struct _tagGIFINFO GIFINFO;
  34. typedef struct _tagGIFINFO *LPGIFINFO;
  35. struct _tagGIFRGB;
  36. typedef struct _tagGIFRGB GIFRGB;
  37. typedef struct _tagGIFRGB *LPGIFRGB;
  38. struct _tagIMAGEDATAINFO;
  39. typedef struct _tagIMAGEDATAINFO IMAGEDATAINFO;
  40. typedef struct _tagIMAGEDATAINFO *LPIMAGEDATAINFO;
  41. struct _tagLZWTABLE;
  42. typedef struct _tagLZWTABLE LZWTABLE;
  43. typedef struct _tagLZWTABLE *LPLZWTABLE;
  44. struct _tagGRAPHCTRL;
  45. typedef struct _tagGRAPHCTRL GRAPHCTRL;
  46. typedef struct _tagGRAPHCTRL *LPGRAPHCTRL;
  47. struct _tagNOTEHCTRL;
  48. typedef struct _tagNOTEHCTRL NOTEHCTRL;
  49. typedef struct _tagNOTEHCTRL *LPNOTEHCTRL;
  50. struct _tagTEXTCTRL;
  51. typedef struct _tagTEXTCTRL TEXTCTRL;
  52. typedef struct _tagTEXTCTRL *LPTEXTCTRL;
  53. struct _tagAPPCTRL;
  54. typedef struct _tagAPPCTRL APPCTRL;
  55. typedef struct _tagAPPCTRL *LPAPPCTRL;
  56. //@@@@@@@@@@@@@@@GIF87a 和 GIF89a 共用的结构@@@@@@@@@@@@@@@@@@
  57. struct _tagGIFINFO
  58. {
  59. WORD FileType; // 89a or 87a 
  60. WORD ColorNum; // 颜色数
  61. WORD BitCount; // 图像的位深度
  62. WORD Width;
  63. WORD Height;
  64. WORD FrameCount; // 共有几幅图
  65. BYTE bkindex; // 背景色索引
  66. BYTE InitPixelBits; // 压缩数据起始数据Bits位数
  67. };
  68. struct _tagGIFRGB
  69. {
  70. BYTE bRed;
  71. BYTE bGreen;
  72. BYTE bBlue;
  73. };
  74. struct _tagGIFHEADER
  75. {
  76. BYTE Signature[GIFVERSIZE]; // 图像版本(87a or 89a)
  77. WORD ScreenWidth; // 图像宽度
  78. WORD ScreenHeight; // 图像高度
  79. BYTE GlobalFlagByte; // 全局标记
  80. BYTE BackGroundColor; // 背景色
  81. BYTE AspectRadio; // 89a版的长宽比
  82. };
  83. // 图像描述符
  84. struct _tagIMAGEDATAINFO
  85. {
  86. BYTE ImageLabel; // 标签值:0x2c
  87. WORD ImageLeft; 
  88. WORD ImageTop;
  89. WORD ImageWidth;
  90. WORD ImageHeight;
  91. BYTE LocalFlagByte; // 位域...
  92. };
  93. #define LZWTABLESIZE 5200
  94. struct _tagLZWTABLE  
  95. {
  96. WORD Header;
  97. WORD Tail;
  98. WORD Code; 
  99. };
  100. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ end @@@@@@@@@@@@@@@@@@@@@@@@@@@@
  101. //@@@@@@@@@@@@以下结构只适用于GIF89a格式的图像文件@@@@@@@@@@@@@@
  102. // 图形扩展块
  103. struct _tagGRAPHCTRL
  104. {
  105. BYTE ExtIntr; //0x21
  106. BYTE Label; //0xF9
  107. BYTE BlockSize; //0x04
  108. BYTE PackedField;
  109. WORD DelayTime;
  110. BYTE TranColorIndex;
  111. BYTE blockTerminator;//0x00
  112. };
  113. // 注释扩展块
  114. struct _tagNOTEHCTRL
  115. {
  116. BYTE ExtIntr; //0x21
  117. BYTE Label; //0xFE
  118. BYTE Data[256]; //变长最大256
  119. BYTE blockTerminator;//0x00
  120. };
  121. // 文本控制区
  122. struct _tagTEXTCTRL
  123. {
  124. BYTE ExtIntr; //0x21
  125. BYTE Label; //0x01
  126. BYTE BlockSize; //0x0c
  127. WORD Left;
  128. WORD Top;
  129. WORD Width;
  130. WORD Height; 
  131. BYTE ForeColorIndex;
  132. BYTE BkColorIndex;
  133. char Data[256]; //变长最大256
  134. BYTE blockTerminator;//0x00
  135. };
  136. // 应用程序控制区
  137. struct _tagAPPCTRL
  138. {
  139. BYTE ExtIntr; //0x21
  140. BYTE Label; //0xFF
  141. BYTE BlockSize; //0x0b
  142. BYTE Identifier[8];
  143. BYTE Authentication[3];
  144. BYTE Data[256]; //变长最大256
  145. BYTE blockTerminator; //0x00
  146. };
  147. //@@@@@@@@@@@@@@@@@@@@@@@@@@ end @@@@@@@@@@@@@@@@@@@@@@@@@@@@
  148. /////////////////////////////////////////////////////////////////////////////
  149. // CGifModuleApp
  150. // See GifModule.cpp for the implementation of this class
  151. //
  152. class CGifModuleApp : public CWinApp
  153. {
  154. public:
  155. CGifModuleApp();
  156. // Overrides
  157. // ClassWizard generated virtual function overrides
  158. //{{AFX_VIRTUAL(CGifModuleApp)
  159. //}}AFX_VIRTUAL
  160. //{{AFX_MSG(CGifModuleApp)
  161. // NOTE - the ClassWizard will add and remove member functions here.
  162. //    DO NOT EDIT what you see in these blocks of generated code !
  163. //}}AFX_MSG
  164. DECLARE_MESSAGE_MAP()
  165. };
  166. // 定义模块版本
  167. #define MODULE_BUILDID 11
  168. // 接口函数声明 — 第一层,唯一与外界联系的接口
  169. int WINAPI AccessGIFModule(INFOSTR *pInfo);
  170. // 命令解释函数 — 第二层解释函数
  171. void _fnCMD_GETPROCTYPE(INFOSTR *pInfo);
  172. void _fnCMD_GETWRITERS(INFOSTR *pInfo);
  173. void _fnCMD_GETWRITERMESS(INFOSTR *pInfo);
  174. void _fnCMD_GETBUILDID(INFOSTR *pInfo);
  175. void _fnCMD_IS_VALID_FILE(INFOSTR *pInfo);
  176. void _fnCMD_GET_FILE_INFO(INFOSTR *pInfo);
  177. void _fnCMD_LOAD_FROM_FILE(INFOSTR *pInfo);
  178. void _fnCMD_SAVE_TO_FILE(INFOSTR *pInfo);
  179. void _fnCMD_IS_SUPPORT(INFOSTR *pInfo);
  180. void _fnCMD_RESIZE(INFOSTR *pInfo);
  181. // 内部执行函数 - 第三层执行函数.....
  182. BOOL IsFileExist(char *lpFileName);
  183. BOOL LoadGIF(PBYTE pFileContent, DWORD filesize, LPINFOSTR pInfo);
  184. UINT AnalizeFileHeader(PBYTE pFileContent, DWORD filesize);
  185. BOOL ConvertToBmpImage(PBYTE SrcData, LPINFOSTR pInfo);
  186. // 将GIF图像保存到数据包背景图像中(只针对单帧GIF图像)
  187. BOOL ConvertToBackgroup(PBYTE SrcData,LPINFOSTR lpInfo);
  188. UINT GetImage(PBYTE pData, LPINFOSTR pInfo);
  189. UINT GetNoteContent(PBYTE pNote);
  190. UINT GetAppContent(PBYTE pApp);
  191. UINT ShowText(PBYTE pText);
  192. UINT GetGrphContent(PBYTE pGrCtrl);
  193. //从字符串中任意字节的某个Bits开始取若干bits,并返回结果
  194. WORD GetOneCode(PBYTE CodeStr ,UINT CodeStrLen, UINT OffsetChar , UINT OffsetBits, UINT Length);
  195. //当某指针指向文件中压缩数据前位置时,取得当前数据区中压缩数据所占字节数
  196. UINT GetCodeCountOnChar (PBYTE CodeStr ,UINT &AllDataLen);
  197. //当某指针指向文件中压缩数据前位置时,取得当前数据区中压缩数据
  198. PBYTE GetCodeDataOnChar(PBYTE CodeDataStr, UINT dataCount);
  199. //把压缩数据解於WORD * 中,
  200. PBYTE GetCodeDataOnBits (PBYTE CodeDataStr,UINT InitLen ,UINT &CodeDataLen);
  201. //得到部份真实数据
  202. BOOL GetPartImageDataFromTable(PBYTE &pImage,LZWTABLE * Table,UINT TableLen);
  203. // 获取GIF文件中的图像个数(该函数只用于_fnCMD_GET_FILE_INFO()函数)
  204. int _get_imgcount(PBYTE pFileContent, DWORD filesize);
  205. // 获取数据包指定位图格式
  206. DESFORMAT _get_desformat(LPINFOSTR pInfo);
  207. // 清除子图像链表
  208. void _clear_list(void);
  209. WORD _cnv_rgb_to_555(BYTE red, BYTE green, BYTE blue);
  210. void _cnv_555_to_rgb(WORD col, PBYTE red, PBYTE green, PBYTE blue);
  211. WORD _cnv_rgb_to_565(BYTE red, BYTE green, BYTE blue);
  212. void _cnv_565_to_rgb(WORD col, PBYTE red, PBYTE green, PBYTE blue);
  213. DWORD _cnv_rgb_to_888(BYTE red, BYTE green, BYTE blue);
  214. /////////////////////////////////////////////////////////////////////////////
  215. //{{AFX_INSERT_LOCATION}}
  216. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  217. #endif // !defined(AFX_GIFMODULE_H__C03B0E49_460A_11D4_8853_C6A14464AE19__INCLUDED_)