QT c++ 海康红外热像仪

//本文描述2通道海康通道红外热像仪预览和抓图

#include "mainwindow.h"

#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)

: QMainWindow(parent)

, ui(new Ui::MainWindow)

{

ui->setupUi(this);

userID=-1;

previewID=-1;

if(initSDK())

qDebug()<<"SDK init Success!\n";

}

long MainWindow::play(HWND hWnd, NET_DVR_PREVIEWINFO &struPlayInfo)

{

struPlayInfo={0};

struPlayInfo.hPlayWnd = hWnd;//需要 SDK 解码时句柄设为有效值,仅取流不解码时可设为空

struPlayInfo.lChannel = 1;//预览通道号

struPlayInfo.dwStreamType = 0;//码流类型:0-主码流,1-子码流,2-三码流,3-虚拟码流,以此类推

struPlayInfo.dwLinkMode = 0;//0- TCP 方式,1- UDP 方式,2- 多播方式,3- RTP 方式,4-RTP/RTSP,5-RSTP/HTTP

struPlayInfo.bBlocked = 1;//0- 非阻塞取流,1- 阻塞取流

long IRealPlayHandle = NET_DVR_RealPlay_V40(userID, &struPlayInfo, NULL, NULL);

if(IRealPlayHandle <0)

{

qDebug() << "NET_DVR_RealPlay_V40 error;error number " <<NET_DVR_GetLastError();

QMessageBox::warning(this,"error","NET_DVR_RealPlay_V40 error;error number "+QString::number(NET_DVR_GetLastError()));

NET_DVR_Logout(userID);

userID=-1;

return -1;

}

return IRealPlayHandle;

}

long MainWindow::play2(HWND hWnd, NET_DVR_PREVIEWINFO &struPlayInfo)

{

struPlayInfo={0};

struPlayInfo.hPlayWnd = hWnd;//需要 SDK 解码时句柄设为有效值,仅取流不解码时可设为空

struPlayInfo.lChannel = 2;//预览通道号

struPlayInfo.dwStreamType = 0;//码流类型:0-主码流,1-子码流,2-三码流,3-虚拟码流

struPlayInfo.dwLinkMode = 0;//0- TCP 方式,1- UDP 方式,2- 多播方式,3- RTP 方式

//4-RTP/RTSP,5-RSTP/HTTP

struPlayInfo.bBlocked = 1;//0- 非阻塞取流,1- 阻塞取流

long IRealPlayHandle = NET_DVR_RealPlay_V40(userID, &struPlayInfo, NULL, NULL);

if(IRealPlayHandle <0)

{

qDebug() << "NET_DVR_RealPlay_V40 error;error number " <<NET_DVR_GetLastError();

QMessageBox::warning(this,"error","NET_DVR_RealPlay_V40 error;error number "+QString::number(NET_DVR_GetLastError()));

NET_DVR_Logout**(userID);**

userID=-1;

return -1;

}

return IRealPlayHandle;

}

bool MainWindow::initSDK()

{

bool isok = NET_DVR_Init();

if(isok == false)

{

qDebug()<< "NET_DVR_Init error;error number is " <<NET_DVR_GetLastError();

QMessageBox::warning(this,"error","NET_DVR_Init error;error number is "+QString::number(NET_DVR_GetLastError()));

return isok;

}

//设置连接时间与重连时间

NET_DVR_SetConnectTime(2000, 1);

NET_DVR_SetReconnect(10000, true);

return isok;

}

bool MainWindow::uninitSDK()//好像没啥效果

{

bool isok = NET_DVR_Cleanup();

if(isok == false)

{

qDebug()<< "NET_DVR_Cleanup error;error number is " <<NET_DVR_GetLastError();

QMessageBox::warning(this,"error","NET_DVR_Cleanup error;error number "+QString::number(NET_DVR_GetLastError()));

return isok;

}

return isok;

}

MainWindow::~MainWindow()

{ uninitSDK();

delete ui;

}

void MainWindow::on_PreviewButton_clicked()

{

Preview_Channel1();

Preview_Channel2();

}

void MainWindow::Preview_Channel1()//通道1

{

if(userID==-1)

{

qDebug() <<"Need Login!\n";

QMessageBox::warning(this,"error","Need Login!");

return;

}

HWND hWnd = (HWND)ui->label ->winId();//显示到label

NET_DVR_PREVIEWINFO struPlayInfo;

previewID = play(hWnd, struPlayInfo);

if(previewID==-1)

{

return;

}

qDebug()<<"channel 1 Preview Success!" << userID;

}

void MainWindow::Preview_Channel2()//通道2

{

if(userID==-1)

{

qDebug() <<"Need Login!\n";

QMessageBox::warning(this,"error","Need Login!");

return;

}

HWND hWnd = (HWND)ui->label2->winId();//显示到label2

NET_DVR_PREVIEWINFO struPlayInfo;

previewID2 = play2(hWnd, struPlayInfo);

if(previewID==-1)

{

return;

}

qDebug()<<"channel 2 Preview Success!" << userID;

}

void MainWindow::on_LoginButton_clicked()

{

NET_DVR_DEVICEINFO_V30 DeviceInfoTmp;

QSettings settings("./cameraConfig.ini", QSettings::IniFormat);

QSettings::Status status = settings.status();

// 获取指定键值示例

QString Ip = settings.value("ip_address/ip","192.168.6.208").toString();

int Port = settings.value("ip_address/port",8000).toInt();

userID=NET_DVR_Login_V30(Ip.toUtf8().data(),Port,(char *)"admin",(char *)"123456",&DeviceInfoTmp);//用户名和密码,读者可以加到配置文件里

if(userID<0)

{

qDebug() << "NET_DVR_Login_V30 error;" << "error number is " << NET_DVR_GetLastError();

QMessageBox::warning(this,"error","NET_DVR_Login_V30 error;error number "+QString::number(NET_DVR_GetLastError()));

return;

}

qDebug()<<"Login Success,userID:" << userID;

qDebug()<<"Login Success,userID:\n" ;

}

void MainWindow::on_StopPreviewButton_clicked()//两通道一起停

{

if(previewID!=-1)

{

if**(NET_DVR_StopRealPlay**(previewID)==false)

{

qDebug() << "NET_DVR_StopRealPlay error;" << "error number is " << NET_DVR_GetLastError();

QMessageBox::warning(this,"error","NET_DVR_StopRealPlay error;error number "+QString::number(NET_DVR_GetLastError()));

return;

}

previewID=-1;

qDebug() <<"Stop Preview1 Success!\n";

}

//------------------------

if(previewID2!=-1)

{

if(NET_DVR_StopRealPlay(previewID2)==false)

{

qDebug() << "NET_DVR_StopRealPlay error;" << "error number is " << NET_DVR_GetLastError();

QMessageBox::warning(this,"error","NET_DVR_StopRealPlay error;error number "+QString::number(NET_DVR_GetLastError()));

return;

}

previewID2=-1;

qDebug() <<"Stop Preview2 Success!\n";

}

}

void MainWindow::on_CaptureButton_clicked()//抓图

{

//channel1

if(userID!=-1)

{

NET_DVR_JPEGPARA IpJpegPara2;

IpJpegPara2.wPicQuality=0;

IpJpegPara2.wPicSize=0xff;

QDateTime current_date_time =QDateTime::currentDateTime();//当前时间

QString current_date =current_date_time.toString("yyyy-MM-dd_hh-mm-ss_zzz");//转换格式

current_date="d:\\Capture_Pic\\"+current_date+".jpg";//jpg格式

char* fileName;

QByteArray ba = current_date.toLatin1(); //

fileName=ba.data();

//channel2

if(NET_DVR_CaptureJPEGPicture(userID,1,&IpJpegPara2,fileName)==false)

{

qDebug() << "NET_DVR_CaptureJPEGPicture error;" << "error number is " << NET_DVR_GetLastError();

QMessageBox::warning(this,"error","NET_DVR_CaptureJPEGPicture error;error number "+QString::number(NET_DVR_GetLastError()));

return;

}

qDebug() <<"Capture Success!\n";

}

}

void MainWindow::on_LogoutButton_clicked()//好像没啥用,保留着

{

if(userID!=-1)

{

if(NET_DVR_Logout(userID)==false)

{

qDebug() << "NET_DVR_Logout error;" << "error number is " << NET_DVR_GetLastError();

QMessageBox::warning(this,"error","NET_DVR_Logout error;error number "+QString::number(NET_DVR_GetLastError()));

return;

}

userID=-1;

qDebug() <<"Logout Success!\n";

}

}

相关推荐
white-persist1 小时前
XXE 注入漏洞全解析:从原理到实战
开发语言·前端·网络·安全·web安全·网络安全·信息可视化
人生导师yxc1 小时前
Java中Mock的写法
java·开发语言
半路程序员1 小时前
Go语言学习(四)
开发语言·学习·golang
老歌老听老掉牙2 小时前
基于 PyQt5 实现刀具类型选择界面的设计与交互逻辑
python·qt·交互
沐知全栈开发2 小时前
C# 枚举(Enum)
开发语言
秦禹辰2 小时前
轻量级开源文件共享系统PicoShare本地部署并实现公网环境文件共享
开发语言·后端·golang
脑子慢且灵2 小时前
C语言与Java语言编译过程及文件类型
java·c语言·开发语言·汇编·编辑器
蒙奇D索大2 小时前
【C语言加油站】C语言文件操作详解:从“流”的概念到文件的打开与关闭
c语言·开发语言·笔记·学习·改行学it
武子康3 小时前
Java-144 深入浅出 MongoDB BSON详解:MongoDB核心存储格式与JSON的区别与应用场景
java·开发语言·数据库·mongodb·性能优化·json·bjson
爱喝水的鱼丶3 小时前
SAP-ABAP:SAP中的用户确认对话框:深入理解与实践POPUP_TO_CONFIRM
运维·开发语言·学习·sap·abap