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

图形图象

开发平台:

Visual C++

  1. /********************************************************************
  2. gol_isee.h - ISee图像浏览器—图像读写模块全局定义文件
  3.           
  4.     版权所有(C) VCHelp-coPathway-ISee workgroup 2000 all member's
  5.     这一程序是自由软件,你可以遵照自由软件基金会出版的GNU 通用公共许
  6. 可证条款来修改和重新发布这一程序。或者用许可证的第二版,或者(根
  7. 据你的选择)用任何更新的版本。
  8.     发布这一程序的目的是希望它有用,但没有任何担保。甚至没有适合特定
  9. 目地的隐含的担保。更详细的情况请参阅GNU通用公共许可证。
  10.     你应该已经和程序一起收到一份GNU通用公共许可证的副本(本目录
  11. GPL.TXT文件)。如果还没有,写信给:
  12.     The Free Software Foundation, Inc.,  675  Mass Ave,  Cambridge,
  13.     MA02139,  USA
  14. 如果你在使用本软件时有什么问题或建议,用以下地址可以与我们取得联
  15. 系:
  16. http://isee.126.com
  17. http://www.vchelp.net
  18. 或:
  19. iseesoft@china.com
  20. 编写人:YZ, xiaoyueer, orbit
  21. 文件版本:
  22. Build 01016
  23. Date  2000-10-16
  24. ********************************************************************/
  25. #ifndef __GOL_ISEE_INC
  26. #define __GOL_ISEE_INC
  27. // 接口版本号
  28. #define ISEE_IFVER 8
  29. #define ISEE_IMAGE_BITCOUNT 32
  30. #define DPK_ANNEXINFOSIZE 512
  31. #define DPK_FILENAMESIZE 512
  32. // 图像信息数据类型定义
  33. //************************************************************
  34. // 图像读写模块操作命令
  35. enum COMMAND
  36. {
  37. CMD_NULL, // 保留
  38. CMD_GETPROCTYPE, // 获取本模块能处理的图像类型,如:BMP,PCX
  39. CMD_GETWRITERS, // 获取本模块的作者列表,多人时用逗号分隔
  40. CMD_GETWRITERMESS, // 获取作者们的留言
  41. CMD_GETBUILDID, // 获取图像模块内部版本号
  42. CMD_IS_VALID_FILE, // 判断指定文件是否能被本模块处理
  43. CMD_GET_FILE_INFO, // 获取指定文件的信息
  44. CMD_LOAD_FROM_FILE, // 从指定图像文件中读取数据
  45. CMD_SAVE_TO_FILE, // 将数据保存到指定文件中
  46. CMD_IS_SUPPORT, // 查询某个命令是否被支持
  47. CMD_RESIZE, // 重新获取指定尺寸的图像位数据(只适用于矢量图像)
  48. //CMD_XXXXXX, // 新命令将在此插入
  49. CMD_MAX // 边界值
  50. };
  51. // 图像读写模块执行结果
  52. enum EXERESULT
  53. {
  54. ER_SUCCESS, // 执行成功
  55. ER_FILERWERR, // 文件在读写过程中发生错误(系统、硬件等原因引起文件读写异常)
  56. ER_MEMORYERR, // 内存不足,导致操作失败
  57. ER_ILLCOMM, // 非法指令
  58. ER_COMMINFOERR, // 与命令有关的信息不足或有缺损
  59. ER_SYSERR, // 操作系统不稳定,无法执行命令
  60. ER_NOTSUPPORT, // 不支持的命令
  61. ER_USERBREAK, // 操作被用户中断
  62. ER_EMPTY, // 初始状态值,用于客户方初始化返回变量
  63. //@@@@@@@@@@Added By YZ 2000.8.21
  64. ER_BADIMAGE,  // 受损的图像文件
  65. //@@@@@@@@@@End 2000.8.21
  66. //ER_XXXX, // 新的错误信息在此插入
  67. ER_MAX // 边界值
  68. };
  69. // 图像类型
  70. enum IMGTYPE
  71. {
  72. IMT_NULL, // 无效图像类型
  73. IMT_RESSTATIC, // 光栅、静态图像
  74. IMT_RESDYN, // 光栅、动态图像
  75. IMT_VECTORSTATIC, // 矢量、静态图像
  76. IMT_VECTORDYN, // 矢量、动态图像
  77. //IMT_XXXXX, // 在此插入新的图像类型
  78. IMT_MAX // 边界值
  79. };
  80. // 图像文件格式
  81. enum IMGFORMAT
  82. {
  83. IMF_NULL, // 未知或无效的图像文件
  84. IMF_BMP, // BMP格式的图像文件
  85. IMF_CUR, // ....
  86. IMF_ICO,
  87. IMF_PCX,
  88. IMF_DCX,
  89. IMF_GIF,
  90. IMF_PNG,
  91. IMF_TGA,
  92. IMF_WMF,
  93. IMF_EMF,
  94. IMF_TIFF,
  95. IMF_JPEG, //
  96. IMF_PSD, // PSD格式的图像文件
  97. //IMF_XXX // 新增格式在此处插入
  98. IMF_MAX // 边界值
  99. };
  100. // 数据包当前状态
  101. enum PACKSTATE
  102. {
  103. PKST_NULL, // 数据包为空
  104. PKST_NOTVER, // 指定文件还未通过验证的阶段(此时只有文件名变量被设置)
  105. PKST_PASSVER, // 指定的文件已通过验证,是有效格式的文件
  106. PKST_PASSINFO, // 已通过验证,且数据包中有该文件的相关信息
  107. PKST_INFOANDBITS, // 已通过验证,且有该文件的相关信息,并含有图像的位数据
  108. PKST_MODIFY, // 数据包中的图像已经被修改过
  109. //PKST_XXXXX, // 插入新的状态
  110. PKST_MAX // 边界值
  111. };
  112. // 图像的存储方式
  113. enum IMGCOMPRESS
  114. {
  115. ICS_RGB = 0, // 未经压缩的DIB存储方式
  116. ICS_RLE8, // RLE8存储方式
  117. ICS_RLE4, // RLE4存储方式
  118. ICS_BITFIELDS, // 分位存储方式
  119. ICS_PCXRLE, // PCX RLE存储方式
  120. ICS_GIFLZW, // GIF LZW存储方式
  121. ICS_GDIRECORD, // WMF的元文件存储方式
  122. //@@@@@@@@@@Added By xiaoyueer 2000.8.20
  123. ICS_RLE32, // RLE32存储方式
  124. ICS_RLE24, // RLE24存储方式
  125. ICS_RLE16, // RLE16存储方式
  126. //@@@@@@@@@End 2000.8.20
  127. //@@@@@@@@@@Added By orbit 2000.8.31
  128. ICS_JPEGGRAYSCALE,  // 灰度图象,JPEG只支持256级灰度
  129. ICS_JPEGRGB,        //red/green/blue 
  130. ICS_JPEGYCbCr,      //Y/Cb/Cr (also known as YUV)
  131. ICS_JPEGCMYK,       //C/M/Y/K
  132. ICS_JPEGYCCK, //Y/Cb/Cr/K
  133. //@@@@@@@@@End 2000.8.31
  134. //ICS_XXXX, // 插入新的存储方式类型
  135. ICS_MAX
  136. };
  137. // 数据结构定义
  138. //************************************************************
  139. // 标准图像格式信息头结构
  140. struct _tagINTERBITMAPINFO;
  141. typedef _tagINTERBITMAPINFO INTERBITMAPINFO;
  142. typedef _tagINTERBITMAPINFO *LPINTERBITMAPINFO;
  143. // 图像信息结构(对于多帧的图像,以下结构只用来描述第一帧)
  144. struct _tagIMAGEINFOSTR;
  145. typedef _tagIMAGEINFOSTR  IMAGEINFOSTR;
  146. typedef _tagIMAGEINFOSTR  *LPIMAGEINFOSTR;
  147. // 图像读写数据包结构
  148. struct _tagINFOSTR;
  149. typedef _tagINFOSTR  INFOSTR;
  150. typedef _tagINFOSTR  *LPINFOSTR;
  151. // 多桢图像的子图像块结构(主要用于动画类图像文件)
  152. struct _tagSUBIMGBLOCK;
  153. typedef _tagSUBIMGBLOCK SUBIMGBLOCK;
  154. typedef _tagSUBIMGBLOCK *LPSUBIMGBLOCK;
  155. // 开发人员信息
  156. struct _tagDeveloperInfo;
  157. typedef _tagDeveloperInfo DEVELOPERINFO;
  158. typedef _tagDeveloperInfo *LPDEVELOPERINFO;
  159. // IRW插件附加内容结构
  160. struct _tagPlugsIn;
  161. typedef _tagPlugsIn PLUGSIN;
  162. typedef _tagPlugsIn *LPPLUGSIN;
  163. // 多桢图像的子图像块结构
  164. struct _tagSUBIMGBLOCK
  165. {
  166. int number; // 子图像块的序列号
  167. int left, top; // 子图像块的显示位置(左上角)
  168. int width, height; // 子图像块的图像宽度及高度
  169. int dowith; // 处置方法(针对于动画GIF)
  170. int userinput; // 用户输入(针对于动画GIF)
  171. COLORREF colorkey; // 透明色分量值
  172. int time; // 显示的延迟时间
  173. unsigned long   *(*pLineAddr);// 标准图像位数据中从0行到n-1行的每一行的首地址
  174. unsigned char *_pbdata; // 标准图像位数据缓冲区首地址
  175. LPINFOSTR parents; // 第一桢图像数据的结构地址(所属数据包结构的地址)
  176. LPSUBIMGBLOCK prev; // 前一桢图像数据的结构地址
  177. LPSUBIMGBLOCK next; // 后一桢图像数据的结构地址(NULL表示这是最后一副图像)
  178. };
  179. // 标准图像格式信息头结构
  180. struct _tagINTERBITMAPINFO
  181. {
  182. BITMAPINFOHEADER bmi; // 标准图像格式的信息结构
  183. DWORD rmask; // 红色掩码
  184. DWORD gmask; // 绿色掩码
  185. DWORD bmask; // 蓝色掩码
  186. DWORD   alphaMask; // Alpha掩码
  187. };
  188. // 图像信息结构(对于多帧的图像,以下结构只用来描述背景图像)
  189. struct _tagIMAGEINFOSTR
  190. {
  191. IMGTYPE imgtype; // 图像类型
  192. IMGFORMAT imgformat; // 图像文件格式
  193. //@@@@@@@@@@@@@Added By orbit for file's saving function at 2000.8.31
  194. BYTE filename[DPK_FILENAMESIZE];//图象的原始文件名(另存为命令时保存原始文件的名字)。
  195. int qualtify; // 图象质量(只适用于JPEG文件)
  196. //@@@@@@@@@@@@End 2000.8.31
  197. unsigned long filesize; // 图像文件的长度(以字节为单位)
  198. unsigned long width; // 图像宽度
  199. unsigned long height; // 图像高度
  200. unsigned long bitcount; // 像素位数(对应于颜色数)
  201. IMGCOMPRESS compression; // 图像的存储方式
  202. unsigned long linesize; // 每一图像行所占的字节数(DWORD对齐,只针对BMP文件)
  203. unsigned long imgnumbers; // 该文件中图像的个数(普通图像文件此值恒定为1,而在动画GIF中可能会大于1)
  204. unsigned int imgchang; // 该文件是否可被编辑(0-表示可以被编辑,1-表示不能被编辑。比如动画GIF就不能被编辑)
  205. unsigned short year; // 图像文件最后修改的年
  206. unsigned short monday; // 图像文件最后修改的月和日(月在高字节,日在低字节)
  207. unsigned long time; // 图像文件最后修改的时间(字序:最高—0, 2—时,1—分,0—秒)
  208. };
  209. // 图像读写数据包结构
  210. struct _tagINFOSTR
  211. {
  212. COMMAND comm; // 操作命令
  213. EXERESULT result; // 执行的结果(是成功了还是失败了)
  214. union {
  215. char cAnnData; // 联合,用于描述不同类型的数据,
  216. int iAnnData; // 是操作命令与执行结果的附加信息,
  217. long lAnnData; // 参见每个命令中对此值的含意说明
  218. float fAnnData;
  219. double dfAnnData;
  220. COMMAND cmAnnData; // 检察命令支持情况时用到
  221. unsigned short  wAnnData;
  222. unsigned long  dwAnnData;
  223. void *pAnnData;
  224. unsigned int siAnnData[DPK_ANNEXINFOSIZE/sizeof(int)];
  225. unsigned char scAnnData[DPK_ANNEXINFOSIZE];
  226. } annexdata;
  227. IMAGEINFOSTR imginfo; // 图像文件信息
  228. char filename[DPK_FILENAMESIZE];// 图像文件的路径及文件名
  229. void *pImgInfo; // 原始图像信息
  230. INTERBITMAPINFO sDIBInfo; // 标准图像格式信息结构
  231. unsigned long   *(*pLineAddr);// 标准图像位数据中从0行到n-1行的每一行的首地址
  232. unsigned char *_pbdata; // 标准图像位数据缓冲区首地址
  233. PACKSTATE state; // 数据包当前的状态
  234. int modify; // 修改标记
  235. LPSUBIMGBLOCK psubimg; // 子图像数据块地址(静态图像此值应设为NULL)
  236. int (WINAPI *fpProgress)(int,int);
  237. // 由调用者提供的进度条显示函数指针(可以是NULL)
  238. // 入口参数1是总的进度数,参数2是当前的进度数。
  239. // 返回参数:如果返回0,则图像读写模块继续操作,
  240. // 如果返回非0值,则读写模块终止操作,返回数据包。
  241. };
  242. // 开发者信息结构
  243. struct _tagDeveloperInfo
  244. {
  245. BYTE modulename[16]; // 代码名称
  246. BYTE author[16]; // 作者名字(多人时用逗号分隔)
  247. BYTE EMail[32]; // 作者电邮地址(多人时用逗号分隔)
  248. BYTE messages[144]; // 作者的留言信息
  249. };
  250. // 插件附加内容结构定义
  251. struct _tagPlugsIn
  252. {
  253. BYTE IRWID[4]; // IRW插件标识符,恒定为字符"IRWP"
  254. WORD attrib;
  255. WORD version;
  256. DWORD function; // 0位是读支持标志,
  257. // 1位是写支持标志,
  258. // 2位是"指定尺寸"的读支持标志,(ReSize)
  259. // 其它未用
  260. DWORD proctypenum;
  261. BYTE proctypestr[32]; // 4*8 ,八组,每组4字节
  262. BYTE author[16];
  263. BYTE EMail[32];
  264. BYTE messages[144];
  265. BYTE modulename[16]; // 模块的名字
  266. }; // 共256个字节
  267. #endif //__GOL_ISEE_INC