GrabBag/SDK/Device/Galaxy/aarch64/imagedemo.cpp

78 lines
2.4 KiB
C++
Raw Normal View History

//-------------------------------
//GXGetImage 接口一次获取一帧图像,本样例代码演示的就是如何用此接口获取一帧图像
//-------------------------------
#include "GxIAPI.h"
int main(intargc, char* argv[])
{
7.GxIAPI
© 139
GX_STATUS status = GX_STATUS_SUCCESS;
GX_DEV_HANDLE hDevice = NULL;
GX_OPEN_PARAM stOpenParam;
uint32_t nDeviceNum = 0;
//初始化库
status = GXInitLib();
if (status!= GX_STATUS_SUCCESS)
{
return 0;
}
//枚举设备列表
status = GXUpdateDeviceList(&nDeviceNum, 1000);
if ((status!= GX_STATUS_SUCCESS)||(nDeviceNum<= 0))
{
return 0;
}
//打开设备
stOpenParam.accessMode = GX_ACCESS_EXCLUSIVE;
stOpenParam.openMode = GX_OPEN_INDEX;
stOpenParam.pszContent = "1";
status = GXOpenDevice(&stOpenParam, &hDevice);
if (status == GX_STATUS_SUCCESS)
{
//设置相机的流通道包长属性,提高网络相机的采集性能
bool bImplementPacketSize = false;
uint32_t unPacketSize = 0;
// 判断设备是否支持流通道数据包功能
status = GXIsImplemented(hDevice, GX_INT_GEV_PACKETSIZE,
&bImplementPacketSize);
if (bImplementPacketSize)
{
// 获取当前网络环境的最优包长
status = GXGetOptimalPacketSize (hDevice, &unPacketSize);
// 将最优包长设置为当前设备的流通道包长值
status = GXSetInt (hDevice, GX_INT_GEV_PACKETSIZE, unPacketSize);
}
int64_t nPayLoadSize = 0;
//获取图像 buffer 大小,下面动态申请内存
status = GXGetInt(hDevice, GX_INT_PAYLOAD_SIZE, &nPayLoadSize);
if (status == GX_STATUS_SUCCESS&&nPayLoadSize> 0)
{
//定义 GXGetImage 的传入参数
GX_FRAME_DATA stFrameData;
//根据获取的图像 buffer 大小 m_nPayLoadSize 申请 buffer
stFrameData.pImgBuf= malloc((size_t)nPayLoadSize);
//发送开始采集命令
status = GXSendCommand(hDevice, GX_COMMAND_ACQUISITION_START);
if (status == GX_STATUS_SUCCESS)
{
//调用 GXGetImage 取一帧图像
while(GXGetImage(hDevice, &stFrameData, 100) != GX_STATUS_SUCCESS)
{
Sleep(10);
}
if (stFrameData.nStatus == GX_FRAME_STATUS_ SUCCESS)
{
//图像获取成功
//对图像进行处理...
}
}
//发送停止采集命令
status = GXSendCommand(hDevice, GX_COMMAND_ACQUISITION_STOP);
//释放图像缓冲区 buffer
free(stFrameData.pImgBuf);
}
}
status = GXCloseDevice(hDevice);
status = GXCloseLib();
return 0;
}