CModeMgr.h 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. #pragma once
  2. #include <deque>
  3. #include "ImproModeCalAndCor.h"
  4. #include <mutex>
  5. typedef enum _Mode_Status
  6. {
  7. Mode_Init,
  8. Mode_Idle,
  9. Mode_Correction,
  10. Mode_Calibration,
  11. }Mode_Status;
  12. typedef enum _RET_Status
  13. {
  14. RET_ERROR_INPUT = -9, //输入参数错误
  15. RET_ERROR_BUFFER_Malloc, //内存分配失败
  16. RET_ERROR_BUFFER_Empty, //buffer为空
  17. RET_ERROR_LOGIC, //逻辑错误
  18. RET_ERROR_OFFSET, //offset相关失败
  19. RET_ERROR_GAIN, //gain相关失败
  20. RET_ERROR_DEFECT, //defect失败
  21. RET_ERROR_GATELINE, //gateline失败
  22. RET_STATUS_NONE, //不做操作
  23. RET_STATUS_CONTINUE = 0, //继续调用此函数
  24. RET_STATUS_FINISH //函数调用完成
  25. }RET_Status;
  26. class FPDCalibration_API CModeMgr
  27. {
  28. private:
  29. void * m_pXMLFile;
  30. Mode_Status m_stModeStatus;
  31. CImgFrame* m_pFrameTemp;
  32. int m_nModeCount;
  33. int m_nCorrectType;
  34. int m_nCalibationType;
  35. int m_nModeNow;
  36. int m_nExpWinNow;
  37. bool m_bGateLineEnable;
  38. //int m_nStep;
  39. bool m_bSpeedupEnable;
  40. int m_nSpeedupType;
  41. unsigned int m_BinningOrZoomFlag;
  42. bool m_bGainUseOffset;
  43. //int m_nRefPoint;
  44. int m_nOffsetStep;
  45. unsigned int m_nOffsetAvgNum;
  46. int m_nGainStep;
  47. unsigned int m_nGainAvgNum;
  48. int m_nDefectStep;
  49. void *m_pSpeedUp;
  50. void *m_pCOffset;
  51. void *m_pCGain;
  52. void *m_pCDefect;
  53. int *m_ImgKindFlag;
  54. string *m_path;
  55. deque <bool> * m_pDqMapIs;
  56. mutex *m_pLock;
  57. WORD *ImageTmp;
  58. int OffsetCorret(CImgFrameSeq* &pSeqInfo, unsigned int nListNum, int nXrayFlag,int * &pImgFlag, bool bPreEnable = false);
  59. int GateLineCorret(CImgFrameSeq* &pSeqInfo, unsigned int nListNum, int nXrayFlag);
  60. int GainCorret(CImgFrameSeq* &pSeqInfo, unsigned int nListNum, int nXrayFlag);
  61. int DefectCorret(CImgFrameSeq* &pSeqInfo, unsigned int nListNum, int nXrayFlag);
  62. int FirstLine(CImgFrameSeq* &pSeqInfo, CImgFrame * &pImgResult, unsigned int nListNum, int nXrayFlag);
  63. int TwiceLine(CImgFrameSeq* &pSeqInfo, CImgFrame * &pImgResult, unsigned int nListNum, int nXrayFlag);
  64. int CreatOffsetMap(CImgFrameSeq* &pCaliSeqInfo, unsigned int nListNum);
  65. int CreatGainMap(CImgFrameSeq* &pCaliSeqInfo, unsigned int nListNum, unsigned int nRefPoint);
  66. int CreatDefectMap(CImgFrameSeq* &pCaliSeqInfo, unsigned int nListNum);
  67. bool ReduceImg(float* pSrcImg, float* pDstImg, int nSrcWidth, int nSrcHeight, int nDstWidth, int nDstHeight);
  68. bool ReduceImg(WORD* pSrcImg, WORD* pDstImg, int nSrcWidth, int nSrcHeight, int nDstWidth, int nDstHeight);
  69. int initialization(void* XMLFile);
  70. bool GetModeInfo(int nModeIndex, DetectorModeInfo* const pMode); //获取指定mode信息
  71. public:
  72. CModeMgr();
  73. virtual ~CModeMgr();
  74. DetectorModeInfo* m_pModeList;
  75. CImgFrame * m_pFrameList;
  76. //返回值为int类型函数,返回值为1正常。返回值0一般为不做任何操作。返回负值为异常。
  77. //mode相关的操作
  78. size_t GetModeCount( ); //获取Mode的总数,返回值mode总数
  79. size_t GetCurrentMode(); //获取当前mode index.返回当前mode index
  80. //int LoadMode( const char *pConfigName);
  81. bool LoadMode( void* XMLFile ); //加载mode map及配置文件
  82. bool SelectMode(int nIndex); //选取mode索引
  83. // 目前通过配置文件对mode进行增加、删除、更新。
  84. //int UpdateMode(int nModeIndex, DetectorModeInfo* pMode); //更新指定Mode。
  85. //int AddMode(int nModeIndex, DetectorModeInfo* pMode); //创建新mode,并设置信息
  86. //int DeleteMode(int nModeIndex); //删除指定Mode.
  87. ////Correction相关
  88. //int ActiveCorrection(int nIndex); // Correction激活某个Mode
  89. bool ActiveCorrection( ); // Correction激活某个Mode
  90. bool UnActiveCorrection(); // Correction取消激活某个Mode
  91. RET_Status GetCorrectionFrameSeq(CImgFrameSeq* &pSeqInfo); // 获Correction取队列及信息
  92. bool SetCorrectionType(int nCaliType); //设置Correction校正类型
  93. RET_Status CorrectFrameData(CImgFrameSeq* pSeqInfo, CImgFrame * pImgResult, bool bFrameDataEx = false);
  94. //bFrameDataEx 异常(X图像采集结束,后期暗场图像没有采集到,而Acq停止),默认false.
  95. ////Calibration相关
  96. bool ActiveCalibration();
  97. //int ActiveCalibration(int nModeIndex); // Calibration激活某个Mode
  98. bool UnActiveCalibration(); // Calibration取消激活某个Mode
  99. bool SetCalibrationType(int CaliType); // 设置Calibration校正类型
  100. RET_Status CalibrateData(CImgFrameSeq* pCaliSeqInfo); // CalibrationData
  101. //int StartCalSeq(); // Calibration队列开始
  102. //int StopCalSeq(); // Calibration队列结束
  103. RET_Status GetCalibrationFrameSeq(CImgFrameSeq* &pCaliSeqInfo);
  104. // 获取队列及信息
  105. ////其它
  106. int CheckFrameData(CImgFrameSeq* pCaliSeqInfo, float fArea = 0.5);//返回值1为亮场图,0为暗场图,负值异常。
  107. bool SetWorkPath(const char* path); //校正文件。
  108. Mode_Status GetModuleStase(); //获取模块状态。
  109. void EnterLock();
  110. void LeaveUnLock();
  111. ////常用操作
  112. //pFrameSeq为 CImgFrameSeq*
  113. //siez_t size = pFrameSeq->size(); 获取Seq里Frame总数,pFrameSeq[index]为Seq里的单个frame, 0< index<size
  114. //(*pCFrameSeq)[index].FrameIn(WORD*buffer, size_t buffersize )
  115. //pCFrameSeq->SetXwindowReq(XWINDOWREQ XwindowReq); 设置曝光时长等。
  116. bool ChooseExpWindow(float fExpWindow);
  117. bool ChooseFrameRate(float fFrameRate);
  118. bool SetBinningOrZoom(unsigned int flag);
  119. int ThreeImageforCreatDefectMap(WORD *dark, WORD *low, WORD *high, double bias);
  120. bool GetuGyRequest(float &DoseReq);
  121. bool SetGainUseOffset(bool flag);
  122. };
  123. //template <typename T>
  124. //inline void safe_delete(T *&target)
  125. //{
  126. // if (nullptr != target)
  127. // {
  128. // delete []target;
  129. // target = nullptr;
  130. // }
  131. //}
  132. template <typename T>
  133. inline void safe_delete_void_ptr(void *&target)
  134. {
  135. if (nullptr != target)
  136. {
  137. T* temp = static_cast<T*>(target);
  138. delete []temp;
  139. temp = nullptr;
  140. target = nullptr;
  141. }
  142. }
  143. //__declspec(dllexport) CImgFrame* MallocFrameList(int nCout, IMAGESIZEINFO *pStImageSizeInfo, IMAGEDEADLINEINFO *pStDeadLineInfo);
  144. //__declspec(dllexport) void FreeFrameList( CImgFrame *pFrame);
  145. //__declspec(dllexport) CImgFrameSeq* MallocFrameSeq(IMGPROCESSTYPE stImgProType, CImgFrame*pFrame, int nCount);
  146. //__declspec(dllexport) void FreeFrameSeq(CImgFrameSeq *pList);
  147. FPDCalibration_C_API CImgFrame* MallocFrame();
  148. FPDCalibration_C_API void FreeFrame(CImgFrame *pFrame);
  149. FPDCalibration_C_API CImgFrameSeq* MallocFrameSeq();
  150. FPDCalibration_C_API void FreeFrameSeq(CImgFrameSeq *pList);
  151. FPDCalibration_C_API CModeMgr * MallocModeMgr();
  152. FPDCalibration_C_API void FreeModeMgr(CModeMgr * pModeMgr);