Создание снимка с помощью веб-камеры 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 устарел, но если он решает вашу проблему, кому наплевать :-))

Другие вопросы по тегам