關於QT加載海康威SDK圖像像疊加的解決方案
 最近,需要用QT做一個界面,在顯示實時圖像的基礎上,需要加一個鼠標在視頻圖像上繪圖的功能(即圖像疊加),在Github上找不到QT版本的方案,經過試驗,代碼如下,供大家參考:
/****************鼠標按下事件*****************/
void Calibration::mousePressEvent(QMouseEvent *e)
{
Q_UNUSED(e);
left_1=ui->widget_5->mapFromGlobal(QCursor::pos()).x();
top_1=ui->widget_5->mapFromGlobal(QCursor::pos()).y();
right_1=ui->widget_5->mapFromGlobal(QCursor::pos()).x();
bottom_1=ui->widget_5->mapFromGlobal(QCursor::pos()).y();
}
/****************鼠標移動事件*****************/
void Calibration::mouseMoveEvent(QMouseEvent *e)
{
Q_UNUSED(e);
right_1=ui->widget_5->mapFromGlobal(QCursor::pos()).x();
bottom_1=ui->widget_5->mapFromGlobal(QCursor::pos()).y();
}
/****************鼠標繪圖事件*****************/
void Calibration::paintEvent(QPaintEvent *e)
{
Q_UNUSED(e);
if(bool_Rectangle==true)
{
NET_DVR_RigisterDrawFun(IRealPlayHandle_1,g_DrawFun_Rect_1,0);
}
}
/****************矩形繪圖觸發*****************/
void Calibration::on_pbn_Rectangle_clicked()
{
bool_Rectangle=true;
}
/****************圖像疊加回調函數*****************/
void CALLBACK Calibration::g_DrawFun_Rect_1(LONG lRealHandle, HDC hDc, DWORD dwUser)
{
Q_UNUSED(lRealHandle);
Q_UNUSED(dwUser);
RECT rect;
rect.left=ca->left_1;
rect.top=ca->top_1;
rect.right=ca->right_1;
rect.bottom=ca->bottom_1;
DrawEdge(hDc,&rect,BDR_SUNKENOUTER,BF_RECT);
}
視頻圖像疊加主要用到了NET_DVR_RigisterDrawFun函數,通過調用回調函數獲取畫圖HDC,在HDC上進行繪圖。
備註:
1.MinGW與MSVC編譯器的結果不一樣,MSVC編譯器無法得出結果。
2.回調函數中必須要引用全局變量,要經過處理。
3.必須在登錄和預覽函數,獲取到圖像句柄之後,再調用NET_DVR_RigisterDrawFun疊加函數。