Создание снимка с помощью веб-камеры IDS uEye - черное изображение
У меня есть веб-камера 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)
Я получаю черное изображение, и я действительно не знаю почему.
Но я не хочу ждать 500 мс для каждого снимка и хотел бы решить эту проблему без него.
В моем исходном коде я проверяю каждое значение результата с помощью методов uEye и всегда получаю успех. Просто убрал эту проверку, потому что трудно читать со всеми операторами if.
2 ответа
Я решил проблему. Может быть, кто-то еще имеет такую же проблему, и это может помочь.
Второй предположил, что решение было действительно простым. Я должен был изменить
status = camera.Acquisition.Capture();
в
status = camera.Acquisition.Capture(DeviceParameter.Wait);
и затем камера ждет, пока вы не сможете сделать снимок.
Вы также можете подписаться на EventFrame с камеры перед запуском камеры с помощью Capture . А затем прочитать память камеры в функции Subscribed следующим образом:
Int32 s32MemID;
uEye.Defines.Status statusRet = Camera.Memory.GetLast(out s32MemID);
System.Drawing.Bitmap image= null;
Camera.Memory.ToBitmap(s32MemID, out image);
...
ps (DeviceParameter.Wait в соответствии с IDS устарел, но если он решает вашу проблему, кому наплевать :-))