CCD camera的一般控制流程及些许困惑
1. 声明变量
PCO_General strGeneral;
PCO_CameraType strCamType;
PCO_Sensor strSensor;
PCO_Description strDescription;
PCO_Timing strTiming;
PCO_Storage strStorage;
PCO_Recording strRecording;
2. 设置变量大小
strGeneral.wSize = sizeof(strGeneral);
strGeneral.strCamType.wSize = sizeof(strGeneral.strCamType);
strCamType.wSize = sizeof(strCamType);
strSensor.wSize = sizeof(strSensor);
strSensor.strDescription.wSize = sizeof(strSensor.strDescription);
strSensor.strDescription2.wSize = sizeof(strSensor.strDescription2);
strDescription.wSize = sizeof(strDescription);
strTiming.wSize = sizeof(strTiming);
strStorage.wSize = sizeof(strStorage);
strRecording.wSize = sizeof(strRecording);
3. 打开相机,填写变量结构
PCO_OPENCAMERA(&hCam, iBoardNumber)
PCO_GETGENERAL(hCam, &strGeneral)
PCO_GETCAMERATYPE(hCam, &strCamType)
PCO_GETSENSORSTRUCT(hCam, &strSensor)
PCO_GETCAMERADESCRIPTION(hCam, &strDescription)
PCO_GETTIMINGSTRUCT(hCam, &strTiming)
PCO_GETRECORDINGSTRUCT(hCam, &strRecording)
4. 设置相机相关参数,曝光时间,触发模式,ROI区域大小等
5. arm the camera使相机准备好
6. 获取图片大小,分配buffer
PCO_GETSIZES(hCam, &actualsizex, &actualsizey, &ccdsizex, &ccdsizey)
PCO_ALLOCATEBUFFER(hCam, &bufferNr, actualsizex*actualsizey*sizeof(WORD), &data, &hEvent)
其中bufferNr是buffer的编号,actualsizex*actualsizey*sizeof(WORD)为data的大小,data用来存储图片数据。
7. 开始进行记录,并将图片数据添加到指定的buffer中
PCO_SetRecordingState(hCam,0x0001);
PCO_AddBufferEx(hCam,0,0,bufferNr,actualsizex,actualsizey,bitres);
原来不清楚data中的图片数据是怎么获取的,本来想将这个困惑写到这里,不过写着写着突然发现原来如此,它是通过bufferNr来制定第六步中分配相应大小的data的。写博客还是能够把问题给理清楚一点的。
8. 显示图像
这里可以采用原来的文章中提到的方法使用wxWidget中遇到的图片存储问题一二
9. 停止记录
PCO_SetRecordingState(hCam,0x000);
10. 从CamRAM中读取图片
PCO_GetNumberOfImagesInSegment(hCam, wActSeg, &dwValidImageCnt, &dwMaxImageCnt);
PCO_GetImageEx(hCam,wActSeg,dw1swImage,dwLastImage,bufferNr,actualsizex,actualsizey,bitres)
上述函数的应该与AddBufferEx有类似的功能。AddBufferEx直接在记录过程中将数据存储在data中,而GetImageEx是从ccd的寄存器中读取相应的数据赋值到data中。
11. 释放用于存储图像数据的buffer,关闭相机
PCO_FreeBuffer(hCamera,sBufNr)
PCO_CloseCamera(hCamera);
上面的过程是获取单个图像的整个流程,如果要连续进行拍摄呢?思考中。。。。。。