ImproModeCalAndCor.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613
  1. #pragma once
  2. #include <time.h>
  3. #include <string>
  4. #include <map>
  5. #include <deque>
  6. //#include<vld.h>
  7. using namespace std;
  8. #ifndef FPDCalibration_DLL_EXPORTS
  9. #ifdef _WIN64
  10. #ifdef _DEBUG
  11. #pragma comment(lib, "FPDCalibrationX64D.lib")
  12. #else
  13. #pragma comment(lib, "FPDCalibrationX64.lib")
  14. #endif
  15. #else
  16. #ifdef _DEBUG
  17. #pragma comment(lib, "FPDCalibrationD.lib")
  18. #else
  19. #pragma comment(lib, "FPDCalibration.lib")
  20. #endif
  21. #endif
  22. #endif
  23. #ifdef FPDCalibration_DLL_EXPORTS
  24. #define FPDCalibration_API __declspec(dllexport)
  25. #define FPDCalibration_C_API extern "C" __declspec(dllexport)
  26. #else
  27. #define FPDCalibration_API __declspec(dllimport)
  28. #define FPDCalibration_C_API extern "C" __declspec(dllimport)
  29. #endif
  30. typedef unsigned short WORD;
  31. typedef unsigned long DWORD;
  32. typedef void * LPVOID;
  33. #define IMG_STATUS_NONE 0
  34. #define IMG_STATUS_OFFSET 1
  35. #define IMG_STATUS_GAIN 2
  36. #define IMG_STATUS_DEFECT 4
  37. #define IMG_STATUS_FISRTLINE 8
  38. #define IMG_STATUS_GRID 16
  39. #define IMG_STATUS_TWICELINE 32
  40. #define IMG_STATUS_GATELINE 64
  41. #define IMG_STATUS_ALL -1
  42. #define CORRTYPE_NONE 0
  43. #define CORRTYPE_OFFSET 1
  44. #define CORRTYPE_GAIN 2
  45. #define CORRTYPE_DEFECT 4
  46. #define CORRTYPE_FISRTLINE 8
  47. #define CORRTYPE_TWICELINE 16
  48. #define CORRTYPE_ALL -1
  49. #define CALIBRATE_NONE 0
  50. #define CALIBRATE_OFFSET 1
  51. #define CALIBRATE_GAIN 2
  52. #define CALIBRATE_DEFECT 4
  53. #define CALIBRATE_FISRTLINE 8
  54. #define CALIBRATE_TWICELINE 16
  55. #define CALIBRATE_ALL -1
  56. //公共定义--------------------------------------------------------------------begin
  57. typedef enum _Img_Type
  58. {
  59. IMGTYPE_EMPTY, //无效图
  60. IMGTYPE_PREIEW, //Preview图
  61. IMGTYPE_FULL, //Full图
  62. IMGTYPE_MAX
  63. }IMG_TYPE;
  64. typedef enum _Img_XrayOrDark
  65. {
  66. IMG_EMPTY,
  67. IMG_XRAY,
  68. IMG_DARK,
  69. IMG_ANY,//dark or xray
  70. IMG_MAX
  71. }IMG_XRAYORDARK;
  72. typedef struct _ImageSizeInfo
  73. {
  74. size_t Width;
  75. size_t Height;
  76. int Bit;
  77. }IMAGESIZEINFO;
  78. typedef struct _ImageDeadLineInfo
  79. {
  80. size_t TopClip;
  81. size_t BottomClip;
  82. size_t LeftClip;
  83. size_t RightClip;
  84. }IMAGEDEADLINEINFO;
  85. typedef enum _XwindowReqType
  86. {
  87. XWINDOWREQ_NONE,//no dose request
  88. XWINDOWREQ_YES,
  89. XWINDOWREQ_MAX
  90. }XWINDOWREQTYPE;
  91. typedef struct _XwinowReq
  92. {
  93. XWINDOWREQTYPE Req;
  94. float FrameRate;
  95. float XwindowSize;//
  96. }XWINDOWREQ;
  97. typedef enum _ImgDoseReqType
  98. {
  99. IMGREQNONE,//no dose request
  100. IMGREQDOSE,
  101. IMGREQEXI,
  102. IMGREQMAX
  103. }IMGDOSEREQTYPE;
  104. typedef struct _DoseReq
  105. {
  106. IMGDOSEREQTYPE Req;
  107. size_t TargetVal;//exi or dose
  108. }DOSEREQ;
  109. typedef enum _ImgProcessType
  110. {
  111. IMGPROCESSNONE,
  112. IMGPROCESSCORRECTION,
  113. IMGPROCESSCALIBRATION,
  114. IMGPROCESSMAX,
  115. }IMGPROCESSTYPE;
  116. typedef enum _Expose_Mode
  117. {
  118. EXPOSE_PULSE,
  119. EXPOSE_CONTINUE,
  120. EXPOSE_AED,
  121. EXPOSE_MAX
  122. }EXPOSE_MODE;
  123. typedef enum _Syn_Type
  124. {
  125. SYNTYPE_NONE, //无同步
  126. SYNTYPE_SOFT, //软同步
  127. SYNTYPE_HARD, //硬同步
  128. SYNTYPE_SOFT_AND_HARD, //软影同步
  129. SYNTYPE_MAX,
  130. }SYN_TYPE;
  131. //坐标系统为(Y下X右)为正向
  132. typedef struct _Dios_2D_Position
  133. {
  134. int X;
  135. int Y;
  136. }DIOS_2D_POSITION;
  137. //公共定义--------------------------------------------------------------------end
  138. //xwindow&framerate的匹配关系,此类作为xwindowmap的基类,只提供访问方法,至于匹配2维矩阵的实现由继承类来实现.
  139. //class __declspec(dllexport) CXwindowMap
  140. //{
  141. //public:
  142. // CXwindowMap();
  143. // ~CXwindowMap();
  144. //
  145. // virtual bool SetFrameRate(size_t Rate) = 0;
  146. // virtual void GetFrameRate(size_t &Rate) = 0;
  147. // virtual void GetFrameRateMax(size_t &Rate) = 0;
  148. // virtual void GetFrameRateMin(size_t &Rate) = 0;
  149. //
  150. // virtual bool SetXwindow(size_t xwindow) = 0;
  151. // virtual void GetXwindow(size_t &xwindow) = 0;
  152. // virtual void GetXwindowMax(size_t &xwindow) = 0;
  153. // virtual void GetXwindowMin(size_t &xwindow) = 0;
  154. //};
  155. //保存单帧相关的所有信息
  156. //图像大小,图像校正情况,图像类型,计量需求()
  157. class FPDCalibration_API CImgFrame
  158. {
  159. //内含变量内容
  160. //1.图像尺寸信息
  161. IMAGESIZEINFO m_stImageSizeInfo;
  162. IMAGEDEADLINEINFO m_stImageDeadLineInfo;
  163. //2.缓存信息
  164. void *m_pImgbuffer;
  165. int m_nPerPixSize;
  166. size_t m_nBuffSize;//(in byte)
  167. size_t m_nFrameID; //Frame ID
  168. size_t m_nSeqID; //Seq ID
  169. //3.图像的状态信息
  170. //3.1校正的信息
  171. DWORD m_ImageStatus;//已经校正后的结果放在这里,用BIT位or区分,IMG_STATUS_XXX
  172. //3.2图像的类型信息
  173. IMG_TYPE m_ImageType;//Prev,Full,无效
  174. IMG_XRAYORDARK m_XrayOrDark;//暗场图or射线图or空图
  175. //Xray图像情况下,需要判断此变量
  176. //0:不需要计量,1:需要Dose,2:需要Exi
  177. DOSEREQ m_DoseReq;
  178. XWINDOWREQ m_XwindowReq;
  179. float m_uGy;
  180. size_t m_CurrentExi;
  181. //是否为有效数据
  182. //可以把FrameIn函数执行当做有数据copy in ,添加一个函数
  183. bool m_bEffective;
  184. public:
  185. //void *m_pImgbuffer;
  186. CImgFrame();
  187. virtual~CImgFrame();
  188. CImgFrame(IMAGESIZEINFO stImageSizeInfo, IMAGEDEADLINEINFO stImageDeadLineInfo, DWORD m_ImageStatus,
  189. IMG_TYPE ImageType, IMG_XRAYORDARK XrayOrDark, DOSEREQ DoseReq, XWINDOWREQ XwindowReq,
  190. size_t CurrentExi, bool Effective);
  191. //copy constructor
  192. CImgFrame(const CImgFrame &tValue);
  193. CImgFrame& operator = (const CImgFrame &tValue);
  194. //init
  195. void ResetFrameEffective();//重新清除数据的有效性,只有在FrameIn成功后才能Effective
  196. bool GetFrameEffective();
  197. //Set&Get FrameInfo
  198. void SetImgType(IMG_TYPE nType);//prev full ...
  199. void GetImgType(IMG_TYPE &nType);//prev full ...
  200. void SetImgKind(IMG_XRAYORDARK XrayOrDark);//dark xray ...
  201. void GetImgKind(IMG_XRAYORDARK &XrayOrDark);//dark xray ...
  202. //由此函数内部进行内存释放和申请
  203. bool SetImgSizeInfo(IMAGESIZEINFO *pImgInfo, IMAGEDEADLINEINFO *pDeadLineInfo);
  204. void GetImgSizeInfo(IMAGESIZEINFO &ImgSizeInfo, IMAGEDEADLINEINFO &DeadLineInfo);
  205. bool SetImgSizeInfoNoBuf(IMAGESIZEINFO *pImgInfo, IMAGEDEADLINEINFO *pDeadLineInfo);
  206. void SetImageStatus(DWORD Status);//校正结果
  207. void AddImageStatus(DWORD Status);//校正结果,内部进行or处理
  208. void GetImageStatus(DWORD &Status);
  209. void ClearImageStatus();
  210. void SetDoseRequest(DOSEREQ Req);
  211. void GetDoseRequest(DOSEREQ &Req);
  212. void SetuGyRequest(float Req);
  213. void GetuGyRequest(float &Req);
  214. void SetXwindowReq( XWINDOWREQ XwindowReq);
  215. void GetXwindowReq( XWINDOWREQ &XwindowReq);
  216. size_t GetImgBuffSize();//获取缓存大小(in byte)
  217. bool GetID(size_t &nFrameID, size_t &nSeqID);
  218. //copy image to(from) Frame,内部进行判断尺寸大小
  219. bool FrameIn(WORD *pImgBuff, size_t BuffSize );//返回成功或失败
  220. size_t FrameOut(WORD *pOutBuff, size_t BuffSize);//返回复制的长度,失败返回0.
  221. void GetFrameID(size_t &nFrameID, size_t &nSeqID);
  222. void SetFrameID(size_t nFrameID, size_t nSeqID);
  223. bool ReleaseBufAndSize(); //清除内存及size信息。其它不变。
  224. bool GetCurrentExi(size_t &Exi);
  225. WORD* GetFrameBuf();
  226. };
  227. //保存一系列的时序图像
  228. class FPDCalibration_API CImgFrameSeq
  229. {
  230. IMGPROCESSTYPE m_ProcessType;//for correction or calibration
  231. CImgFrame *m_1pFrameList;//Frame List
  232. size_t m_FrameListSize;//Frame Total Count,
  233. size_t m_FrameSeqSize;//Frame Seq Count
  234. size_t m_CurrentFrameSeqIdx;//Frame Seq Idx,当前Idx指向的是未处理过的Frame.
  235. XWINDOWREQ m_XwindowReq;
  236. public:
  237. CImgFrameSeq();
  238. ~CImgFrameSeq();
  239. //init
  240. void ClearSeqIdx();//保持序列不动,只更新SeqIdx为0
  241. void ResetFrameSeq(int SeqSize);//序列长度同步,若有必要内存也得申请更新
  242. bool CreateSeq(IMGPROCESSTYPE PrcessType, CImgFrame *pImgFrameTemplate, size_t size);
  243. bool ReleaseSeq();
  244. void GetProcessType(IMGPROCESSTYPE &PrcessType);
  245. void SetXwindowReq(XWINDOWREQ XwindowReq);
  246. void GetXwindowReq(XWINDOWREQ &XwindowReq);
  247. //Access methods
  248. size_t size();//Total Frame Count
  249. size_t idx();//Current Frame Idx
  250. size_t PlusSeqIdx();// seqidx++
  251. //校正模块创建Seq以后,要loop更新Frame的属性
  252. //使用者是基于Frame属性,更新Frame数据
  253. CImgFrame &operator [](size_t idx);//反馈ImgFrame引用
  254. };
  255. typedef enum _Offset_Mode
  256. {
  257. PRE_OFFSET,
  258. POST_OFFSET,
  259. PRE_POST_OFFSET,
  260. MAX_OFFSET
  261. }OFFSET_MODE;
  262. class FPDCalibration_API OffsetInfo
  263. {
  264. OFFSET_MODE m_eOffsetMode; //offset mode
  265. //int *m_pFrameRate; //帧频率,
  266. //comment by cjy:XwindowSize!!
  267. //float* m_pExposureWindow; //曝光窗口毫秒
  268. IMAGESIZEINFO m_stMapSizeInfo;
  269. unsigned int m_nOffsetLSB; //暗场图灰度均值
  270. deque <time_t> *m_pDequeMapCreatTime; //offsetmap创建时间
  271. deque <float> *m_pDequeTemp;
  272. deque <float> *m_pDequeExpWindow;
  273. deque <float> *m_pDequeMaxRate;
  274. //map <float, WORD* > *m_pMapOffset; //<曝光窗口, offset buffer>
  275. unsigned int m_n_ListNum;
  276. unsigned int m_nAvgImgNum;
  277. unsigned int m_nInvalidNum;
  278. IMAGESIZEINFO m_stSizeInfo;
  279. //void *m_pOffsetMatrix;
  280. public:
  281. OffsetInfo();
  282. OffsetInfo( IMAGESIZEINFO stSizeInfo);
  283. ~OffsetInfo();
  284. bool SetOffsetMode( OFFSET_MODE eOffsetMode );
  285. //bool SetFrameRate( int nFrameRate );
  286. bool SetOffsetLSB( int nOffsetLSB);
  287. bool SetExposureWindow(float nExpWindow);
  288. bool SetMaxFrameRate(float fMaxFrameRate);
  289. bool GetMaxFrameRate(float &fMaxFrameRate, unsigned int nIndex);
  290. bool SetOffsetMapCreatTime(time_t tOffsetMapCreatTime);
  291. bool SetMapTemp(float fMapTemp);
  292. /* bool AddedOffsetMap(float fExpWindow, WORD* pBuf,
  293. float fMapTemp, time_t tOffsetMapCreat); */
  294. bool GetOffsetMode(OFFSET_MODE &eOffsetMode);
  295. //bool GetFrameRate(int &nFrameRate);
  296. bool GetExposureWindow(float &nExposureWindow, unsigned int nIndex);
  297. bool GetOffsetLSB( unsigned int & nOffsetLSB);
  298. bool GetOffsetMapCreatTime( time_t &tOffsetMapCreatTime, unsigned int nIndex );
  299. bool GetMapTemp( float &nMapTemp, unsigned int nIndex );
  300. bool GetListNum(unsigned int & nListNum);
  301. bool ClearOffsetMapList();
  302. bool SetOffsetImgNum( unsigned int nNum);
  303. bool GetOffsetImgNum(unsigned int &nNum);
  304. bool SetOffsetInvalidNum( unsigned int nNum);
  305. bool GetOffsetInvalidNum(unsigned int &nNum);
  306. float m_fGateLineDXL[10];
  307. int m_nGateLineRef_R;
  308. int m_nGateLineRef_L;
  309. };
  310. class FPDCalibration_API GainInfo
  311. {
  312. float m_fGainValue; //设置的增益值
  313. int m_nMaxPv; //饱和值
  314. int m_nRefrencePointNum; //校正节点数量
  315. unsigned int m_nRefrenceImgNum; //每个校正节点曝光数量
  316. //comment by cjy:如何选择?Dose or LSB?
  317. deque<int> *m_pDeqTargetLsb;
  318. deque<float> *m_pDeqTargetDose;
  319. time_t m_tGainMapCreatTime;
  320. float m_fMapTemp;
  321. IMAGESIZEINFO m_stSizeInfo;
  322. //void *m_pGainMatrix;
  323. unsigned int m_nInvalidNum;
  324. public:
  325. bool setGainValue( float fGainValue);
  326. bool getGainValue(float& fGainValue);
  327. bool setMaxPv(int nMaxPv);
  328. bool getMaxPv(int &nMaxPv);
  329. bool setRefrencePointNum(int nRefrencePointNum);
  330. bool getRefrencePointNum(int &nRefrencePointNum);
  331. bool setPointImgNum(unsigned int nRefrenceImgNum);
  332. bool getPointImgNum(unsigned int &nRefrenceImgNum);
  333. bool setTargetLsb(int nTargetLsb);
  334. bool getTargetLsb(int &nTargetLsb, unsigned int nIndex);
  335. bool setTargetDose(float fTargetDose);
  336. bool getTargetDose(float &fTargetDose, unsigned int nIndex);
  337. bool setGainMapCreatTime( time_t tGainMapCreatTime);
  338. bool getGainMapCreatTime(time_t &tGainMapCreatTime);
  339. bool setMapTemp(float fMapTemp);
  340. bool getMapTemp(float &fMapTemp);
  341. bool InGainBuf( WORD * pGainBuf, int nListSize, int nBufsize);
  342. GainInfo( int nRefrencePointNum, IMAGESIZEINFO stSizeInfo);
  343. GainInfo();
  344. ~GainInfo();
  345. bool SetGainInvalidNum(unsigned int nNum);
  346. bool GetGainInvalidNum(unsigned int &nNum);
  347. };
  348. class FPDCalibration_API DefectMapInfo
  349. {
  350. deque<int> *m_pDeqTargetLsb;
  351. deque<float> *m_pDeqTargetDose;
  352. //WORD *pPixBuf;
  353. public:
  354. DefectMapInfo();
  355. ~DefectMapInfo();
  356. bool setTargetLsb(int nTargetLsb);
  357. bool getTargetLsb(int &nTargetLsb, unsigned int nIndex);
  358. bool getSize(size_t &nCount);
  359. bool setTargetDose(float fTargetDose);
  360. bool getTargetDose(float &fTargetDose, unsigned int nIndex);
  361. };
  362. class FPDCalibration_API PreviewInfo //preview信息
  363. {
  364. bool m_bEnalbeOutput; //Preview图是否输出
  365. int m_nPreWidth; //Preview图宽
  366. int m_nPreHeight;
  367. int m_nPreBit;
  368. IMAGESIZEINFO m_stSizeInfo;
  369. int m_nPreBinary; //Bining模式
  370. public:
  371. PreviewInfo();
  372. ~PreviewInfo();
  373. bool setEnalbeOutput(bool bEnalbeOutput);
  374. bool setSize(IMAGESIZEINFO stSizeInfo);
  375. bool setBinary(int nPreBinary);
  376. bool getEnalbeOutput(bool &bEnalbeOutput);
  377. bool getSize(IMAGESIZEINFO &stSizeInfo);
  378. bool getBinary(int &nPreBinary);
  379. };
  380. //typedef struct _FILE_HEADER
  381. //{
  382. // unsigned short PhySizeWidth;
  383. // unsigned short PhySizeHeight;
  384. // unsigned short PhySizeBit;
  385. //
  386. // unsigned short dwPhyCenterX;
  387. // unsigned short dwPhyCenterY;
  388. //
  389. // unsigned short OrgSizeWidth;
  390. // unsigned short OrgSizeHeight;
  391. // unsigned short OrgSizeBit;
  392. //
  393. // unsigned short OrgImgDeadLineTop;
  394. // unsigned short OrgImgDeadLineBottom;
  395. // unsigned short OrgImgDeadLineLeft;
  396. // unsigned short OrgImgDeadLineRight;
  397. //
  398. // unsigned short m_BinningDx;
  399. // unsigned short m_BinningDy;
  400. //
  401. // unsigned short FullImgSizeWidth;
  402. // unsigned short FullImgSizeHeght;
  403. // unsigned short FullImgSizeBit;
  404. //
  405. // bool m_SupportPrevImage;
  406. //
  407. // unsigned short PrevImgSizeWidth;
  408. // unsigned short PrevImgSizeHeght;
  409. // unsigned short PrevImgSizeBit;
  410. //
  411. // unsigned short ExpMode;
  412. //
  413. // unsigned short OffsetFrameRateCount;
  414. // unsigned short OffsetXwindowCount;
  415. //
  416. // unsigned short offsetMode;
  417. //
  418. // unsigned short nGainValue;
  419. // unsigned short MaxPv;
  420. // unsigned short nRefrencePointNum; //校正节点数量
  421. // unsigned short nRefrenceImgNum; //每个校正节点曝光数量
  422. //
  423. // unsigned short * GainTargetLsb;
  424. // float * GainTargetDoes;
  425. //
  426. // unsigned short * LowTargetLsb;
  427. // float * LowTargetDoes;
  428. // unsigned short * HighTargetLsb;
  429. // float * HighTargetDoes;
  430. //
  431. //
  432. //} stFileHeader;
  433. class FPDCalibration_API DetectorModeInfo
  434. {
  435. //图像相关----------------------------------------------------------------------------------------
  436. //物理尺寸
  437. IMAGESIZEINFO m_stPhySizeInfo;
  438. DIOS_2D_POSITION m_stPhyCenterPosition;
  439. //原始采集图像信息
  440. //original image in pixel
  441. IMAGESIZEINFO m_stOrgImgSizeInfo;
  442. IMAGEDEADLINEINFO m_stOrgImgDeadLineInfo;
  443. //binning mode
  444. size_t m_BinningDx;
  445. size_t m_BinningDy;
  446. //输出图像大小信息
  447. //要由原始图像信息和Binning模式进行匹配
  448. //特例:
  449. /*
  450. org图像为1000*1000,binning为2*2
  451. 输出Ful图像不一定是500*500,研发者可以自定义,如300*300.当然图像的转换要由内部进行.
  452. */
  453. //full image
  454. IMAGESIZEINFO m_stFullImgSizeInfo;
  455. //IMAGEDEADLINEINFO m_FullImgDeadLineInfo;//上层不需要这个DeadLine的信息
  456. //prev image
  457. bool m_SupportPrevImage;
  458. IMAGESIZEINFO m_stPrevImgSizeInfo;
  459. //IMAGEDEADLINEINFO m_PrevImgDeadLineInfo;//上层不需要这个DeadLine的信息
  460. //采集相关----------------------------------------------------------------------------------------
  461. //SYN_TYPE m_SyncMode;校正模块不需要此参数
  462. EXPOSE_MODE m_ExpMode;//continue,pulse,aed...
  463. float m_fStandardEXICoef;
  464. //曝光模式(pulse)中,采集帧率和xwindow大小是有一定的关系的(需要內建表or建立公式).
  465. //分辨率和FrameRate也有一定的关系
  466. //每选择一个FrameRate,会有一套Xwindow的size,峰值,最低值
  467. //采集帧率
  468. //Ex.在Correction中校正模块基于当前的(FrameRate,Xwindow大小,原始图像大小)找到对应的OffsetMap,进行Correction.
  469. //2维矩阵横向是xwindow的min和max,纵向为framerate.
  470. //至于颗粒度,由配置设定来决定.
  471. //CXwindowMap *m_pXwindowmap;
  472. //校正对象列表
  473. //Offset校正对象,这个得是2维数组!!!
  474. //一维用于FrameRate,一维用于Xwindow(数组中的[0]为最低xwindow值,最高位为最高值)
  475. //每个OffsetInfo指定特定的FrameRate和Xwindow,由采集模块基于要求进行采集.
  476. //访问方法为 m_pOffset[FrameRateIdx][XwindowIdx]
  477. /*检讨点:基于Xwindow建立线性Offsetmap呢?还是基于各个FrameRate+Xwindow建立二维Offsetmap呢?由吕工决定*/
  478. size_t m_OffsetFrameRateCount;
  479. size_t m_OffsetXwindowCount;
  480. public:
  481. DetectorModeInfo();
  482. ~DetectorModeInfo();
  483. bool setPhySizeInfo( IMAGESIZEINFO PhySizeInfo );
  484. bool setPhyCenterPosition( DIOS_2D_POSITION PhyCenterPosition);
  485. bool setOrgImgSizeInfo(IMAGESIZEINFO OrgImgSizeInfo);
  486. bool setOrgImgDeadLineInfo(IMAGEDEADLINEINFO OrgImgDeadLineInfo);
  487. bool setBinning( int nX ,int nY);
  488. bool setFullImgSizeInfo(IMAGESIZEINFO FullImgSizeInfo);
  489. //bool setSupportPrevImage(bool m_SupportPrevImage);
  490. //bool setPrevImgSizeInfo(IMAGESIZEINFO PrevImgSizeInfo);
  491. bool setEXPOSE_MODE(EXPOSE_MODE ExpMode);
  492. bool setStandardEXICoef(float fValue);
  493. bool getPhySizeInfo(IMAGESIZEINFO &PhySizeInfo);
  494. bool getPhyCenterPosition(DIOS_2D_POSITION &PhyCenterPosition);
  495. bool getOrgImgSizeInfo(IMAGESIZEINFO &OrgImgSizeInfo);
  496. bool getOrgImgDeadLineInfo(IMAGEDEADLINEINFO &OrgImgDeadLineInfo);
  497. bool getBinning(size_t &nX, size_t &nY);
  498. bool getFullImgSizeInfo(IMAGESIZEINFO &FullImgSizeInfo);
  499. //bool getSupportPrevImage(bool &SupportPrevImage);
  500. //bool getPrevImgSizeInfo(IMAGESIZEINFO &PrevImgSizeInfo);
  501. bool getEXPOSE_MODE(EXPOSE_MODE &ExpMode);
  502. bool getStandardEXICoef(float &fValue);
  503. bool saveModeFile();
  504. int ReduceImg(WORD* pSrcImg, WORD* pDstImg, int nSrcWidth, int nSrcHeight, int nDstWidth, int nDstHeight);
  505. OffsetInfo *m_pOffsetInfo;
  506. GainInfo *m_pGainInfo;
  507. DefectMapInfo *m_pDefectInfo;
  508. PreviewInfo* m_pPreviewInfo;
  509. };
  510. FPDCalibration_C_API DetectorModeInfo* MallocMode();
  511. FPDCalibration_C_API void FreeMode(DetectorModeInfo* pMode);