GrabBag/SDK/Galaxy/aarch64/imagedemo.cpp

78 lines
2.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//-------------------------------
//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;
}