78 lines
2.4 KiB
C++
78 lines
2.4 KiB
C++
//-------------------------------
|
||
//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;
|
||
} |