WIA: device.ExecuteCommand (CommandID.wiaCommandTakePicture);возвращает ноль - PullRequest
4 голосов
/ 28 января 2011

У меня есть старая программа, которую я использовал для удаленного управления цифровой камерой, чтобы автоматически делать фотографии и передавать их на ПК. Программа основана на WIA и, насколько я помню, изначально была разработана и использовалась на Windows XP.

Недавно вынул его из архивов и пытался заставить его работать на 64-битной Windows 7, используя ту же камеру. Нахождение камеры и запуск захвата работает без проблем. Однако при выполнении этой строки:

//device of type WIA.Device
Item item = device.ExecuteCommand(CommandID.wiaCommandTakePicture);

null возвращается, оставляя меня без ссылки на изображение для передачи. Искал решение все выше и ниже, но не смог ничего найти. Нашел другой сайт QA, где в ответе предлагалось использовать:

//manager of type WIA.DeviceManager, device of type WIA.Device
manager.RegisterEvent(EventID.wiaEventItemCreated, device.DeviceID);
manager.OnEvent += new _IDeviceManagerEvents_OnEventEventHandler(manager_OnEvent);

можно получить события, содержащие itemID после захвата изображения. Попробовал это, и ни одно событие не было возбуждено.

1 Ответ

0 голосов
/ 30 января 2011

По моему опыту, WIA имеет много странностей.Я также боролся с null, возвращаемым Item item = device.ExecuteCommand(CommandID.wiaCommandTakePicture);, и, хотя я работаю в Windows 7, моя машина 32-битная.

Решение, на моей машине, заключается в прослушивании события, упомянутого в исходном вопросе.Если это не работает, попробуйте зарегистрироваться для события, используя идентификатор устройства с подстановочными знаками:

manager.RegisterEvent(EventID.wiaEventItemCreated, Miscellaneous.wiaAnyDeviceID);
device.ExecuteCommand(CommandID.wiaCommandTakePicture);

Я также обнаружил, что мне нужно было перерегистрировать событие после каждой команды устройства, иначе оно прекратило бы запуск.*

...