我是靠谱客的博主 甜蜜酸奶,最近开发中收集的这篇文章主要介绍大恒相机+VS开发+Qt 跑通示例工程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

直接复制和调试大恒相机自带的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 跑通示例工程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部