WIA: device.ExecuteCommand(CommandID.wiaCommandTakePicture); возвращает ноль
У меня есть старая программа, которую я использовал для удаленного управления цифровой камерой, чтобы автоматически делать фотографии и передавать их на ПК. Программа основана на WIA и, насколько я помню, изначально была разработана и использовалась на Windows XP.
Недавно вынул его из архивов и пытался заставить его работать на 64-битной Windows 7, используя ту же камеру. Нахождение камеры и запуск захвата работает без проблем. Однако при выполнении этой строки:
//device of type WIA.Device
Item item = device.ExecuteCommand(CommandID.wiaCommandTakePicture);
возвращается ноль, оставляя меня без ссылки на изображение для передачи. Искал решение все выше и ниже, но не смог ничего найти. Нашел другой сайт 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 ответ
По моему опыту, WIA имеет много странностей. Я также боролся с null
вернулся Item item = device.ExecuteCommand(CommandID.wiaCommandTakePicture);
и хотя я работаю в Windows 7, моя машина 32-битная.
Решение на моей машине - прислушиваться к событию, указанному в исходном вопросе. Если это не работает, попробуйте зарегистрироваться для события, используя идентификатор подстановочного устройства:
manager.RegisterEvent(EventID.wiaEventItemCreated, Miscellaneous.wiaAnyDeviceID);
device.ExecuteCommand(CommandID.wiaCommandTakePicture);
Я также обнаружил, что мне нужно перерегистрировать событие после каждой команды устройства, иначе оно прекратило бы запуск.