我有一个IDS UEYE网络摄像头,并希望通过ueyedotnet.dll(版本1.6.4.2(制作快照。
目前我正在使用此代码。
var camera = new Camera();
camera.Init(_deskCamInfo.UEyeId);
camera.Memory.Allocate();
camera.Acquisition.Capture();
Thread.Sleep(500);
int s32MemID;
camera.Memory.GetActive(out s32MemID);
Bitmap image;
camera.Memory.ToBitmap(s32MemID, out image);
var converter = new ImageConverter();
var imageData = (byte[])converter.ConvertTo(image, typeof(byte[]));
当我将代码与Thread.Sleep(500)
一起使用时,我会按预期获得快照,一切正常。但是,如果我删除Thread.Sleep(500)
,我会得到一个黑色图像,我真的不知道为什么。
,但我不想等待每个快照的500ms,并且想解决这个问题。
在我的原始代码中,我从UEYE方法中检查每个结果值,我将始终取得成功。只是删除了此检查,因为很难用所有IF语句阅读。
我解决了问题。也许其他人遇到了同样的问题,它可以提供帮助。
第二个猜测解决方案真的很简单。我不得不更改
status = camera.Acquisition.Capture();
to
status = camera.Acquisition.Capture(DeviceParameter.Wait);
,然后相机等到您可以捕获图像。
您还可以从相机订阅 eventframe ,然后使用 capture 启动相机之前。a比读取订阅函数中的相机内存:
Int32 s32MemID;
uEye.Defines.Status statusRet = Camera.Memory.GetLast(out s32MemID);
System.Drawing.Bitmap image= null;
Camera.Memory.ToBitmap(s32MemID, out image);
...
P.S。( DeviceParameter.Wait 是根据IDS弃用的,但如果它解决了您的问题谁该死:-)(