基于Qt来开发Sapera LT,需要经过以下几个步骤:
1. 在建立的Qt工程添加Sapera LT的相关路径
(1)右键工程—Properties
(2)Configuration Properties—C/C++—General—Additional Include Directories
(3)添加Basic和Include的路径
(4)Configuration Properties—Linker—General—Additional Library Directories
(5)添加Lib路径
(6)Configuration Properties—Linker—Input—Additional Dependences
(7)添加corapi.lib和SapClassBasic.lib
2. 在建立的工程中,添加头文件SapClassBasic
#include "SapClassBasic.h"
注意:这里只能用Basic类,不能用基于MFC开发的GUI类。
3. 在工程类中声明Sapera LT的各类
private: //私有变量 SapLocation *pLocLft; SapAcquisition *pAcqLft; SapBuffer *pBufferLft; SapAcqToBuf *pTransferLft;
4. 在工程类中声明回调函数
public: static void XferCallbackLft(SapXferCallbackInfo *pInfoLft); //回调函数
注意:回调函数的极其重要,在每次传完一帧图像后,会自动调用回调函数。如果要实时处理图像数据,应该将图像处理函数放在里面。
5. 定义采集、缓存、传输类,并使能
pAcqLft=new SapAcquisition(SapLocation("Xcelera-CL_PX4_2",0),"PtGrey_2048_2048.ccf" ); //采集 pBufferLft=new SapBuffer(1,pAcqLft); //buffer pTransferLft=new SapAcqToBuf(pAcqLft, pBufferLft, XferCallbackLft, this); //传输链路 bool successLft=pAcqLft->Create(); successLft=pBufferLft->Create(); successLft=pTransferLft->Create();
6. 定义回调函数
void LftCapt::XferCallbackLft(SapXferCallbackInfo *pInfoLft) { LftCapt *pGrabQtLft=(LftCapt *) pInfoLft->GetContext(); //------------------------------------------------------------------------- //采集内存图像数据 pGrabQtLft->pBufferLft->GetAddress((void**)&pBufDatLft); //内存中图像尺寸特征 int heightBufLft=0,widthBufLft=0,pitchBufLft=0; heightBufLft=pGrabQtLft->pBufferLft->GetHeight(); widthBufLft=pGrabQtLft->pBufferLft->GetWidth(); pitchBufLft=pGrabQtLft->pBufferLft->GetPitch();
其中,虚线以上部分是回调函数定义的固定格式。
7. 工程退出时,delete对象(注意顺序)
delete pTransferLft; delete pBufferLft; delete pAcqLft;
神爱世人,甚至将他的独生子(耶稣)赐给他们,叫一切信他的,不至灭亡,反得永生。
——【圣经·约翰福音3:16】