• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            CCD camera類設計及簡易實現

            上一篇文章中介紹了關于CCD camera實現的一般流程CCD camera的一般控制流程及些許困惑,現在想用類來實現這個過程。該類設計以及實現的目的是用于相機拍照,成像,存儲。目前僅考慮拍照與實時成像兩個過程。由于從簡單上進行設計,實現的一般流程中的一些步驟能夠省略。具體代碼如下:

               1: // ccd_class.h
               2: class CCDClass
               3: {
               4: private:
               5:     HANDLE      m_hCam;               // handle of camera
               6:     SHORT       m_sBufNr;
               7:     WORD       *m_imgBuf;             // store img from camera
               8:     WORD        m_wXResAct;           // x resolution of img
               9:     WORD        m_wYResAct;           // y resolution of img
              10:     DWORD       m_imgSize;            // x resolution * y resolution
              11:     HANDLE      m_hEvent;             // will be used in WaitForSingleObjects()
              12:     unsigned char *m_imgRGB;          // convert data in imgBuf to RGB
              13:     
              14: public:
              15:     CCDClass();
              16:     ~CCDClass();
              17:  
              18:     HANDLE GethEvent();
              19:     unsigned char* GetImgRGB();
              20:  
              21:     void Conv16to24();
              22:  
              23:     int OpenCamera();             // just open camera
              24:     int InitialCamera();          // allocate buffer and set recording on
              25:     int RunCamera();              // record img to allocated buffer
              26:     int StopCamera();             // set recording off
              27:     int CloseCamera();            // close camera and free pic buffer
              28: };

             

               1: // ccd_class.cpp
               2: #include "ccd_class.h"
               3:  
               4: CCDClass::CCDClass()
               5: {
               6:     // initial variables
               7:     m_hCam = NULL;
               8:     m_hEvent = NULL;
               9:     m_sBufNr = -1;
              10:     m_imgBuf = 0;
              11:     m_wXResAct = 1392;            // the default x resolution is 1392
              12:     m_wYResAct = 1040;            // the default y resolution is 1040
              13:     m_imgRGB = new unsigned char[1392*1040*3];
              14: }
              15:  
              16: CCDClass::~CCDClass()
              17: {
              18:     delete [] m_imgRGB;
              19:     imgRGB = 0;
              20: }
              21:  
              22: // Open camera
              23: int CCDClass::OpenCamera()
              24: {
              25:     PCO_OpenCamera(&m_hCam, 0);          // default open successfully
              26:     return 0;
              27: }
              28:  
              29: // allocate buffer and set recording on
              30: int CCDClass::InitialCamera()
              31: {
              32:     m_sBufNr = -1;            // mean the buffer will be a new buffer
              33:     PCO_ArmCamera(m_hCam);
              34:  
              35:     DWORD bufSize;            // size of buffer in byte
              36:     int errCode;
              37:  
              38:     m_imgSize = m_wXResAct * m_wYResAct;
              39:     bufSize = 2*m_imgSize;
              40:     m_imgBuf = new WORD[m_imgSize];
              41:  
              42:     if (PCO_AllocateBuffer(m_hCam, &m_sBufNr, m_bufSize, &m_imgBuf, &m_hEvent) != 0) {
              43:         errCode = CloseCamera();
              44:         return errCode;
              45:     }
              46:  
              47:     if (PCO_SetRecordingState(m_hCam, 0x0001) != 0) {
              48:         errCode = CloseCamera();
              49:         return errCode;
              50:     }
              51:     
              52:     return 0;
              53: }
              54:  
              55: // record img in allocated buffer
              56: int CCDClass::RunCamera()
              57: {
              58:     if (PCO_AddBufferEx(m_hCam, 0, 0, m_sBufNr, m_wXResAct,
              59:                         m_wYResAct, 14) != 0) {    // 14 is bytes in one pixel
              60:         wxMessageBox(wxT("PCO_AddBufferEx"));
              61:         errCode = CloseCamera();
              62:         return errCode;
              63:     }
              64:     
              65:     return 0;
              66: }
              67:  
              68: // set recording off
              69: int CCDClass::StopCamera()
              70: {
              71:     if (PCO_SetRecordingState(m_hCam, 0x0000) != 0) {
              72:         errCode = CloseCamera();
              73:         return errCode;
              74:     }
              75:     
              76:     return 0;
              77: }
              78:  
              79: // close camera and free img buffer
              80: int CCDClass::CloseCamera()
              81: {
              82:     if (m_sBufNr >= 0) {
              83:         PCO_FreeBuffer(m_hCam, m_sBufNr);
              84:     }
              85:  
              86:     if (m_hCam != NULL) {
              87:         PCO_CloseCamera(m_hCam);
              88:     }
              89:     delete [] m_imgBuf;
              90:     m_imgBuf = 0;
              91:     return 999;
              92: }
              93:  
              94: // convert 16bit to 24bit rgb img
              95: void CCDClass::Conv16to24()
              96: {
              97:     unsigned char *m_cData = new unsigned char[m_imgSize];
              98:     
              99:     // convert 16bit img to 8bit
             100:     for (size_t i = 0; i < m_imgSize; ++i) {
             101:         m_cData[i] = (unsigned char)(m_imgBuf[i] >> 6);
             102:     }
             103:     
             104:     unsigned char *ptr1 = m_cData;
             105:     unsigned char *ptr2 = m_imgRBG;
             106:     for (size_t i = 0; i < m_imgSize; ++i) {
             107:         *ptr2++ = *ptr1;
             108:         *ptr2++ = *ptr1;
             109:         *ptr2++ = *ptr1++;
             110:     }
             111:     
             112:     delete [] m_cData;
             113:     m_cData = 0;
             114: }
             115:  
             116: HANDLE CCDClass::GethEvent()
             117: {
             118:     return m_hEvent;
             119: }
             120:  
             121:  
             122: unsigned char* CCDClass::GetImgRGB()
             123: {
             124:     return m_imgRGB;
             125: }

            將函數RunCamera單獨起來主要是為了實現實時成像。

            不過還不清楚如何進行實時成像,采用onTimer嗎?

            posted on 2012-07-04 11:16 鐘謝偉 閱讀(1020) 評論(0)  編輯 收藏 引用

            <2012年7月>
            24252627282930
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            導航

            統計

            常用鏈接

            留言簿(1)

            隨筆檔案

            IT網站

            My Friends

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            成人妇女免费播放久久久| 国产女人aaa级久久久级| 中文字幕成人精品久久不卡| 久久精品国产亚洲AV香蕉| 青青草国产97免久久费观看| 亚洲嫩草影院久久精品| 2020最新久久久视精品爱 | 97久久国产亚洲精品超碰热| 亚洲国产日韩综合久久精品| 亚洲欧洲久久av| 久久婷婷五月综合成人D啪| 一本大道久久东京热无码AV| 亚洲午夜无码AV毛片久久| 日韩电影久久久被窝网| 久久人做人爽一区二区三区 | 欧美精品乱码99久久蜜桃| 欧美日韩精品久久免费| 久久精品中文騷妇女内射| 国产一区二区精品久久| 国产成人无码精品久久久久免费| 久久丝袜精品中文字幕| 国内高清久久久久久| 国产综合久久久久| 久久精品国产亚洲一区二区三区| 伊人久久大香线蕉综合网站| 午夜精品久久久久久久| 99久久亚洲综合精品网站| 久久亚洲av无码精品浪潮| 久久精品国产亚洲77777| 成人国内精品久久久久影院VR| 久久久久黑人强伦姧人妻| 中文字幕热久久久久久久| 日本精品久久久中文字幕| 漂亮人妻被中出中文字幕久久| 国产精品福利一区二区久久| 久久综合视频网站| 国产精品国色综合久久| 7777久久久国产精品消防器材| 久久被窝电影亚洲爽爽爽| 伊人久久大香线蕉精品不卡| 亚洲欧美精品伊人久久|