坑:使用C#主动采集图像接收返回的结构体的指针
平台:
软件:vs2015
硬件:某品牌的工业相机
主动采集的函数:
CamAPI.gcGetImage(camid, DataBuffer, 500, Param);
//获取一帧图像
//nID in 为设备ID值,范围从1~32
//pBuffer out 接收图像数据缓存,必须大于实际的图像缓存大小,最好再加1M字节以上,防止缓存溢出
//TimeOut in 超时时间设置,以ms为单位
//pParam out CBFUN_INFO结构体指针(gcParam.h),不使用可以设置为NULL
//返回实际有效的图像数据大小,以字节为单位
//如果调用gcRegImageCbFun()函数注册了回调函数,则该函数无效!
//GCDEV_API u32 __cdecl gcGetImage(u8 nID, void * pBuffer, u32 TimeOut, void *pParam=NULL);
解决方案:
声明接收的类型,使用new对象,并且输入存放的内存数量。
ushort[] Param = new ushort[1024];
通过使用debug查看返回的结构体的值,可以发现 数值已经返回;接下来就是简单的取值了。
意外状况:
我是开了一个线程去做主动采集图像的,但那时用的是死循环,所以我在主线程一旦使用 停止采集按钮, threadplay.Join(),(此函数用于对开启线程的阻塞)整个界面便卡死,而且图像采集并没有停止,原因是因为死循环没有退出去。
知道问题所在就简单了,该成变量判断就行 while (bplay == true){};
整个问题的思路还是在于对程序要有熟练,此致记之。