• <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

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲国产精品无码久久九九| 久久精品国产半推半就| 久久人人爽人人精品视频| 久久国产精品免费一区| 婷婷久久综合九色综合绿巨人| 久久毛片一区二区| 国产精品久久久久影院色| 久久成人永久免费播放| 人妻少妇久久中文字幕一区二区| 欧美一区二区精品久久| 久久久国产精华液| 亚洲精品高清国产一久久| 国产精品久久久久蜜芽| 一级做a爰片久久毛片人呢| 天天做夜夜做久久做狠狠| 狠狠色丁香久久婷婷综| 久久天天婷婷五月俺也去| 超级碰久久免费公开视频| 久久综合久久自在自线精品自| 久久久人妻精品无码一区| 精品999久久久久久中文字幕| 久久婷婷人人澡人人爽人人爱| 国产亚洲美女精品久久久| 亚洲国产精品无码久久久秋霞2| 久久99精品久久久久久水蜜桃 | 日本精品久久久久中文字幕8| 亚洲精品无码久久不卡| 久久精品国产免费一区| 久久Av无码精品人妻系列| 久久久久久久久66精品片| 久久人搡人人玩人妻精品首页| 亚洲一本综合久久| 99久久国产主播综合精品| 久久精品人人做人人爽电影| 国内精品久久久久影院优| 久久久噜噜噜久久中文福利| 亚洲精品tv久久久久久久久 | 精品国产热久久久福利| 精品久久久久久久| 成人a毛片久久免费播放| 国产精品激情综合久久|