概述
直接复制和调试大恒相机自带的C++开发软件开发说明书中的示例工程,报错众多,无从下手。
终于经过注释多处代码,跑通了!以此为记,再接再厉。
#include <QDebug>
#include "GalaxyIncludes.h"
// 用户继承掉线事件处理类
class CSampleDeviceOfflineEventHandler : public IDeviceOfflineEventHandler
{
public :
void DoOnDeviceOfflineEvent(void* pUserParam)
{
qDebug() << "收到设备掉线事件!" ;
}
};
// 用户继承属性更新事件处理类
class CSampleFeatureEventHandler : public IFeatureEventHandler
{
public:
void DoOnFeatureEvent(const GxIAPICPP::gxstring &strFeatureName, void* pUserParam)
{
qDebug() << "收到曝光结束事件";
}
};
// 用户继承采集事件处理类
class CSampleCaptureEventHandler : public ICaptureEventHandler
{
public:
void DoOnImageCaptured(CImageDataPointer &objImageDataPointer, void* pUserParam)
{
qDebug() << "收到一帧图像";
qDebug() << "ImageInfo: " << objImageDataPointer->GetStatus();
qDebug() << "ImageInfo: " << objImageDataPointer->GetWidth();
qDebug() << "ImageInfo: " << objImageDataPointer->GetHeight();
qDebug() << "ImageInfo: " << objImageDataPointer->GetPayloadSize();
}
};
int main(int argc, char *argv[])
{
// 声明事件回调对象指针
IDeviceOfflineEventHandler* pDeviceOfflineEventHandler = NULL; // 掉线事件回调对象
IFeatureEventHandler* pFeatureEventHandler = NULL; // 远端设备事件回调对象
ICaptureEventHandler* pCaptureEventHandler = NULL; // 采集回调对象
// 初始化
IGXFactory::GetInstance().Init();
try
{
do
{
// 枚举设备
gxdeviceinfo_vector vectorDeviceInfo;
IGXFactory::GetInstance().UpdateDeviceList(1000, vectorDeviceInfo);
if (0 == vectorDeviceInfo.size())
{
qDebug() << "无可用设备";
break;
}
// 打开第一台设备以及设备下面第一个流
CGXDevicePointer ObjDevicePtr = IGXFactory::GetInstance().OpenDeviceBySN(vectorDeviceInfo[0].GetSN(), GX_ACCESS_EXCLUSIVE);
CGXStreamPointer ObjStreamPtr = ObjDevicePtr->OpenStream(0);
// 获取远端设备属性控制器
CGXFeatureControlPointer ObjFeatureControlPtr = ObjDevicePtr->GetRemoteFeatureControl();
// 获取流层属性控制器
CGXFeatureControlPointer objStreamControlPtr = ObjDevicePtr->GetRemoteFeatureControl();
提高网络相机的采集性能,设置方法参考以下代码(目前只有千兆网系列相机支持设置最优包长)。
//GX_DEVICE_CLASS_LIST objDeviceClass =
// ObjDevicePtr->GetDeviceInfo().GetDeviceClass();
//if (GX_DEVICE_CLASS_GEV == objDeviceClass) {
// //判断设备是否支持流通道数据包功能
// if (true == ObjFeatureControlPtr->IsImplemented("GevSCPSPacketSize"))
// {
// //获取当前网络环境的最优包长值
// int nPacketSize = ObjStreamPtr->GetOptimalPacketSize();
// //将最优包长值设置为当前设备的流通道包长值
// ObjFeatureControlPtr->GetIntFeature(
// "GevSCPSPacketSize")->SetValue(nPacketSize);
// }
//}
// 设置Buffer处理模式
//objStreamControlPtr->GetEnumFeature("StreamBufferHandlingMode")->SetValue("OldestFirst");
// 注册设备掉线事件(目前只有千兆网相机支持此事件通知)
GX_DEVICE_OFFLINE_CALLBACK_HANDLE hDeviceOffline = NULL;
pDeviceOfflineEventHandler = new CSampleDeviceOfflineEventHandler();
hDeviceOffline = ObjDevicePtr->RegisterDeviceOfflineCallback(pDeviceOfflineEventHandler, NULL);
//设置曝光时间(示例中写死 us,只是示例,并不代表真正可工作参数)
ObjFeatureControlPtr->GetFloatFeature("ExposureTime")->SetValue(50);
//注册远端设备事件:曝光结束事件(目前只有千兆网系列相机支持曝光结束事件)
// 选择事件源
//ObjFeatureControlPtr->GetEnumFeature("EventSelector")->SetValue("ExposureEnd");
// 使能事件
//ObjFeatureControlPtr->GetEnumFeature("EventNotification")->SetValue("On");
//GX_FEATURE_CALLBACK_HANDLE hFeatureEvent = NULL;
//pFeatureEventHandler = new CSampleFeatureEventHandler();
//hFeatureEvent = ObjFeatureControlPtr->RegisterFeatureCallback("EventExposureEnd", pFeatureEventHandler, NULL);
// 注册回调采集
pCaptureEventHandler = new CSampleCaptureEventHandler();
ObjStreamPtr->RegisterCaptureCallback(pCaptureEventHandler, NULL);
// 发送开采命令
ObjStreamPtr->StartGrab();
ObjFeatureControlPtr->GetCommandFeature("AcquisitionStart")->Execute();
Sleep(100000);
// 发送停采命令
ObjFeatureControlPtr->GetCommandFeature("AcquisitionStop")->Execute();
ObjStreamPtr->StopGrab();
// 注销采集回调
ObjStreamPtr->UnregisterCaptureCallback();
// 注销远端设备事件
//ObjFeatureControlPtr->UnregisterFeatureCallback(hFeatureEvent);
// 注销设备掉线事件
ObjDevicePtr->UnregisterDeviceOfflineCallback(hDeviceOffline);
// 释放资源
ObjStreamPtr->Close();
ObjDevicePtr->Close();
} while (0);
}
catch (CGalaxyException&e)
{
qDebug() << "错误码: " << e.GetErrorCode();
qDebug() << "错误描述信息: " << e.what() ;
}
catch (std::exception&e) {
qDebug() << "错误描述信息: " << e.what();
}
// 反初始化库
IGXFactory::GetInstance().Init();
// 销毁事件回调指针
if (NULL != pCaptureEventHandler)
{
delete pCaptureEventHandler;
pCaptureEventHandler = NULL;
}
if (NULL != pDeviceOfflineEventHandler)
{
delete pDeviceOfflineEventHandler;
pDeviceOfflineEventHandler = NULL;
}
if (NULL != pFeatureEventHandler)
{
delete pFeatureEventHandler;
pFeatureEventHandler = NULL;
}
return 0;
}
最后
以上就是甜蜜酸奶为你收集整理的大恒相机+VS开发+Qt 跑通示例工程的全部内容,希望文章能够帮你解决大恒相机+VS开发+Qt 跑通示例工程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复