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

图形图象

开发平台:

Visual C++

  1. /********************************************************************
  2. IRWEngine.h - ISee图像读写引擎定义文件
  3.     版权所有(C) VCHelp-coPathway-ISee workgroup 2000 all member's
  4.     这一程序是自由软件,你可以遵照自由软件基金会出版的GNU 通用许可证
  5. 条款来修改和重新发布这一程序。或者用许可证的第二版,或者(根据你
  6. 的选择)用任何更新的版本。
  7.     发布这一程序的目的是希望它有用,但没有任何担保。甚至没有适合特定
  8. 目地的隐含的担保。更详细的情况请参阅GNU通用许可证。
  9.     你应该已经和程序一起收到一份GNU通用许可证(GPL)的副本。如果还没有,
  10. 写信给:
  11.     The Free Software Foundation, Inc.,  675  Mass Ave,  Cambridge,
  12.     MA02139,  USA
  13. 如果你在使用本软件时有什么问题或建议,用以下地址可以与我们取得联
  14. 系:
  15. http://isee.126.com
  16. http://www.vchelp.net
  17. 或:
  18. iseesoft@china.com
  19. 作  者:YZ E-mail:yzfree@sina.com
  20. Analyst E-mail:analyst@citiz.net
  21.     功能实现:图像读写插件的封装,独立的工作线程,透明的读写过程。
  22. 文件版本:
  23. Build 00009
  24. Date  2000-12-20
  25. ********************************************************************/
  26. #ifndef __IRWENGINE_INC__
  27. #define __IRWENGINE_INC__
  28. #ifndef __GOL_ISEE_INC
  29. #include "..publicgol_isee.h"
  30. #endif
  31. #if _MSC_VER > 1000
  32. #pragma once
  33. #endif // _MSC_VER > 1000
  34. // 本文件中定义的类
  35. class CIRWEngine;
  36. class CThumImage;
  37. class CReturnReceipt;
  38. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2
  39. // 图像读写引擎及相关类定义
  40. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2
  41. // 插件信息数组尺寸
  42. #define IRWE_PROCTYPE_SIZE 2048
  43. #define IRWE_PROCID_SIZE 256 // 最多支持256种格式的图像
  44. // 图像读写引擎的状态
  45. #define IRWES_DEATH 0 // 引擎未经初始化
  46. #define IRWES_EXIST 1 // 引擎已被初始化
  47. //@@@@缩放代码相关定义@@@@Add by Analyst 2000-12-19@@@@
  48. #define IRWE_THUMIMAGE_MINI_SIZE 16 // 拇指图的最小像框尺寸为16*16象素
  49. #define _IRWE_THUM_APLHATAB_SIZE 129 // Alpha表尺寸
  50. typedef __int64 QWORD;
  51. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  52. // 图像读写引擎访问接口(该类不能定义实例,只能作为接口使用!!!)
  53. class CIRWEngine
  54. {
  55. public:
  56. CIRWEngine();
  57. ~CIRWEngine();
  58. // 接口函数
  59. public:
  60. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  61. // 获取开发者信息
  62. int GetDeveloperInfo(LPDEVELOPERINFO *lppDevInfo);
  63. // 获取引擎支持的文件扩展名过滤串
  64. LPTSTR GetFileFilterString(void);
  65. // 暂停引擎的工作
  66. void Pause(void);
  67. // 恢复引擎工作
  68. void Restore(void);
  69. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  70. // 通过扩展名及文件内容判断指定文件是否是被支持的图像文件
  71. CReturnReceipt *IsValidImageFile(LPCTSTR lpFileName, BOOL type);
  72. // 通过扩展名断指定文件是否是被支持的图像文件(较上面的那个函数快)
  73. BOOL IsValidImageFile(LPCTSTR lpFileName);
  74. // 获取图像文件的信息(包括尺寸、位深等)
  75. CReturnReceipt *GetImageFileInfo(LPCTSTR lpFileName);
  76. void GetImageFileInfo(CReturnReceipt *pCRRt);
  77. // 获取图像文件的位数据(以ISee格式(倒向32位DIB))
  78. CReturnReceipt *LoadImageFromFile(LPCTSTR lpFileName, BOOL pri=FALSE);
  79. void LoadImageFromFile(CReturnReceipt *pCRRt, BOOL pri=FALSE);
  80. // 保存图像
  81. void SaveImageToFile(LPCTSTR lpNewFileName, CReturnReceipt *lpCRRt, 
  82. LPBYTE lpSaveInfo, DWORD dwSaveInfoSize);
  83. // 以指定尺寸读取图像位数据(只针对矢量图)
  84. CReturnReceipt *LoadImageResize(LPCTSTR lpFileName, CSize& size);
  85. // 获取图像文件的拇指图(以ISee格式(倒向32位DIB))
  86. CReturnReceipt *GetThumImage(LPCTSTR lpFileName, CRect& rect, BOOL keepbit=FALSE, BOOL pri=FALSE);
  87. void GetThumImage(CReturnReceipt *pCRRt, CRect& rect, BOOL keepbit=FALSE, BOOL pri=FALSE);
  88. // 内部函数
  89. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  90. int Destruct(void);
  91. };
  92. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2
  93. // 回执单及相关类型的定义
  94. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2
  95. // 命令被执行的情况
  96. enum IRWE_PROCESSING
  97. {
  98. IRWEPROC_INITING, // 信息块正在初始化,还未被放入信息队列
  99. IRWEPROC_FELL_IN, // 信息还在排队,未处理
  100. IRWEPROC_PROCESSING, // 信息正在被处理(已被提取出信息队列)
  101. IRWEPROC_COMPLETE, // 信息已处理完毕,命令执行成功
  102. IRWEPROC_FAIL // 信息已处理完毕,但命令执行失败(系统问题)
  103. };
  104. // 图像读写引擎命令表
  105. enum IRWECOMMAND
  106. {
  107. IRWEC_NULL, // 空命令
  108. IRWEC_IS_VALID_FILE_COMN, // 判断指定文件是否是指定的图像文件(普通判断)
  109. IRWEC_IS_VALID_FILE_NICETY, // 判断指定文件是否是指定的图像文件(精密判断)
  110. IRWEC_GET_FILE_INFO, // 获取图像文件的信息
  111. IRWEC_LOAD_FROM_FILE, // 将图像文件读入内存
  112. IRWEC_SAVE_TO_FILE, // 保存图像到文件
  113. IRWEC_RESIZE, // 获取指定尺寸的图像
  114. IRWEC_IS_SUPPORT, // 查询指定的功能是否被支持 
  115. IRWEC_IN_END = 2048, // 结束引擎线程
  116. IRWEC_GET_THUMIMAGE, // 获取图像文件的拇指图
  117. IRWEC_GET_THUMIMAGE_A_BIT, // 获取图像文件的拇指图并保留图像位数据
  118. //IEC_XXX, // 新的命令在此加入
  119. IRWEC_MAX // 边界值
  120. };
  121. // 命令执行失败的原因
  122. enum IRWE_ERROR
  123. {
  124. IRWEERR_SUCCESS, // 没有错误,命令执行成功
  125. IRWEERR_FILERWERR, // 文件在读写过程中发生错误(系统、硬件等原因引起文件读写异常)
  126. IRWEERR_MEMORYERR, // 内存不足,导致操作失败
  127. IRWEERR_ILLCOMM, // 非法指令
  128. IRWEERR_COMMINFOERR, // 与命令有关的信息不足或有缺损
  129. IRWEERR_SYSERR, // 操作系统不稳定,无法执行命令
  130. IRWEERR_NOTSUPPORT, // 不支持的命令
  131. IRWEERR_USERBREAK, // 操作被用户中断
  132. IRWEERR_BADIMAGE,  // 受损的图像文件
  133. IRWEERR_ENGINEERR=1024, // 图像读写引擎内部发生故障
  134. IRWEERR_ENGINECLOSE // 引擎已被关闭,无法完成指定命令
  135. //IRWEERR_XXXXX // 新的错误信息在此插入
  136. };
  137. // 命令的执行情况
  138. enum IRWERRT_RESULT
  139. {
  140. IRWERRT_FAIL = -1, // 命令执行失败,用GetLastError()函数获取详细的错误信息
  141. IRWERRT_ING  = 0, // 命令正在执行中
  142. IRWERRT_SUCCESS = 1 // 命令执行成功
  143. };
  144. // 拇指图数据来源
  145. enum IRWETHUM_FROM
  146. {
  147. IRWETHUM_FROM_NULL, // 空,类中还没有数据
  148. IRWETHUM_FROM_CREATE, // 新创建的拇指图数据
  149. IRWETHUM_FROM_STOCK // 预存储的拇指图数据
  150. };
  151. // 拇指图类定义
  152. class CThumImage
  153. {
  154. public:
  155. CThumImage();
  156. ~CThumImage();
  157. public:
  158. IRWETHUM_FROM m_thumfrom; // 拇指图数据来源及当前状态
  159. BITMAPINFOHEADER m_thuminfo; // 拇指图尺寸、位深等信息
  160. PBYTE m_thumbits; // 拇指图位数据
  161. DWORD **m_thumlines; // 拇指图行地址数组
  162. CRect m_thumbound; // 能包含拇指图的最小正方形的尺寸
  163. };
  164. // 回执单定义
  165. class CReturnReceipt
  166. {
  167. protected:
  168. INFOSTR m_data; // 图像读写模块使用的数据包
  169. CThumImage m_thumbnails; // 拇指图数据
  170. int m_subproc; // 图像读写模块的工作进展(读取进度)
  171. IRWE_PROCESSING m_processing; // 图像读写引擎的工作进展(五种状态)
  172. IRWE_ERROR m_errorinfo; // 命令执行失败的原因
  173. UINT m_ID; // 订单编号
  174. IRWECOMMAND m_command; // 原始命令
  175. TCHAR m_filename[_MAX_PATH]; // 相关文件
  176. int  m_modelID; // 相关插件标识值
  177. BOOL m_break; // 中断操作的标志(TRUE-中断操作)
  178. public:
  179. CReturnReceipt();
  180. ~CReturnReceipt();
  181. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  182. IRWECOMMAND GetCommand(void); // 获取最近一次操作的命令
  183. IRWERRT_RESULT GetResult(void); // 查询当前命令的执行情况
  184. IRWE_ERROR GetLastError(void); // 获取最近一次操作的返回码(如果
  185. // 最近一次的操作失败,则返回码就
  186. // 是失败的原因(参见IRWE_ERROR))
  187. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  188. PACKSTATE GetDataPackState(void); // 获取回执单中数据包的当前状态(
  189. // 参见PACKSTATE枚举定义)
  190. int GetImageWidth(void); // 获取图像宽度
  191. int GetImageHeight(void); // 获取图像高度
  192. int GetImageNumber(void); // 获取图像个数
  193. LPBYTE GetImageBitData(void); // 获取图像位数据缓冲区地址
  194. LPBYTE *GetImageLineAddr(void); // 获取图像行地址数组
  195. LPINTERBITMAPINFO GetImageBitmapInfo(void); // 获取图像的底层信息
  196. LPIMAGEINFOSTR GetImageInfo(void); // 获取图像的抽象信息
  197. LPSUBIMGBLOCK GetSubImageBlock(void); // 获得子图像数据块链
  198. // 表的首地址
  199. void *GetOrgImageInfo(void); // 获取图像的原始信息(可能为空)
  200. LPCTSTR GetFileName(void); // 获取图像的原始文件名
  201. void ClearImageBitData(void); // 清除回执单中位数据(如果有的话)
  202. // ,并将回执单设定在PKST_PASSINFO
  203. // 状态
  204. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  205. BOOL IsThumImage(void); // 判断回执单中是否存在拇指图数据
  206. IRWETHUM_FROM GetThumImageFrom(void); // 获知拇指图数据来源
  207. CRect& GetThumImageRect(void); // 获取拇指图尺寸
  208. CRect& GetThumBoundRect(); // 获取拇指图外框尺寸
  209. BITMAPINFOHEADER *GetThumImageInfo(void); // 获取拇指图底层信息
  210. PBYTE GetThumImageBit(void); // 获取拇指图位缓冲区地址
  211. int GetImagePluginID(void); // 获取负责本回执单的图像读写插件ID
  212. int GetReturnReceiptID(void); // 获取本回执单的编号
  213. IRWE_PROCESSING GetProcessing(void);// 查询回执单当前命令的执行情况
  214. void BreakProcess(void); // 中断当前正在执行的命令
  215. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  216. private:
  217. void _clear_list(void); // 清除回执单中的子图像数据
  218. static int WINAPI fpProgress(int,int); // 图像读写模块的读写
  219. // 进展回调函数
  220. static UINT m_obj_count; // 回执单个数计数器
  221. //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  222. friend class CIRWEngine;
  223. friend UINT ie_ThreadEnter(LPVOID);
  224. friend void _fnIRWEC_IS_VALID_FILE(CReturnReceipt *, BOOL);
  225. friend void _fnIRWEC_GET_FILE_INFO(CReturnReceipt *);
  226. friend void _fnIRWEC_LOAD_FROM_FILE(CReturnReceipt *);
  227. friend void _fnIRWEC_SAVE_TO_FILE(CReturnReceipt *);
  228. friend void _fnIRWEC_RESIZE(CReturnReceipt *);
  229. friend void _fnIRWEC_GET_THUM_IMAGE(CReturnReceipt *, BOOL);
  230. friend int _fnIRWEC_Helper_IS_VALID_FILE(CReturnReceipt *, int);
  231. friend int _fnIRWEC_Helper_GET_FILE_INFO(CReturnReceipt *, int);
  232. friend int _IRWE_PostCommandToImgEngine(CReturnReceipt *, BOOL);
  233. friend CReturnReceipt *_IRWE_ReadCommandFromTotalList(void);
  234. };
  235. ///////////////////////////////////////////////////////////////
  236. // 图像读写引擎全局助手函数
  237. // 获取图像读写引擎地址(指针)
  238. CIRWEngine *ISeeGetIRWEngine(void);
  239. // 查询图像读写引擎状态
  240. int ISeeQuestionIRWEState(void);
  241. // 创建图像读写引擎
  242. int ISeeBeginIRWEngine(void);
  243. // 关闭图像读写引擎
  244. void ISeeEndIRWEngine(void);
  245. #endif /*__IRWENGINE_INC__*/