關於QT加載海康威SDK圖像像疊加的解決方案

關於QT加載海康威SDK圖像像疊加的解決方案


       &nbsp最近,需要用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疊加函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章