基於Qt的Sapera LT開發
基於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;