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