Создание снимков с помощью Windows C # Canon SDK в сравнении с PTP или MTP

StackOverflow https://stackoverflow.com/questions/1710352

  •  19-09-2019
  •  | 
  •  

Вопрос

Я надеюсь получить некоторые общие рекомендации по достижению, казалось бы, простой цели.У меня есть зеркальная камера (Canon EOS 50D), и мне нужно написать приложение, которое подскажет камере сделать снимок.Мне также нужно перенести снимок на компьютер и, возможно, удалить его из хранилища камеры.Бонусом было бы получить предварительный просмотр в реальном времени с камеры в моем приложении.Моей средой будет Windows (либо XP Pro, либо Vista Enterprise) и .Net 3.5 (C #).

Я провел кое-какие исследования и нашел пару вариантов.Один из них, который, я знаю, сработает, но ограничивает меня использованием только камер Canon в будущем.Я нашел и скачал SDK от Canon, который предоставляет большую часть этой функциональности.Я просмотрел SDK, и, хотя он обширный и написан на C, в нем есть оболочки C #, которые немного ускорят разработку.

Другой вариант, который я нашел, называется Windows Portable Devices.По-видимому, это API, который будет взаимодействовать с устройствами, реализующими стандарты PTP и MTP.Он основан на COM и, насколько я могу судить, у него нет .Сетевых оболочек.Однако это не является ограничителем показа.Я мог бы P / Вызвать нужную мне функциональность или написать управляемую C ++ DLL для использования в моем приложении для общения с камерой.

Я ищу любого, у кого есть опыт работы с WPD, кто мог бы дать мне рекомендации.Я просмотрел документацию и увидел ссылки на перенос изображений и удаление изображений.Однако я не видел упоминаний о командах для создания снимка, получения изображения предварительного просмотра или, скажем, фокусировки / автофокусировки.

Это было полезно?

Решение

API WPD предоставляет команду WPD_COMMAND_STILL_IMAGE_CAPTURE_INITIATE WPD_COMMAND_STILL_IMAGE_CAPTURE_INITIATE

Я не уверен, поддерживает ли это ваша камера, но выяснить это должно быть достаточно просто.Если вы можете получить инструмент "wpdinfo" из комплекта разработки драйверов и запустить его при подключенной камере, отправьте ему команду WPD_COMMAND_CAPABILITIES_GET_SUPPORTED_COMMANDS и посмотрите, поддерживает ли он команду захвата неподвижного изображения.ЕСЛИ это так, то вы могли бы попробовать.

Другие советы

PTP и MTP - это протоколы для передачи файлов с цифровой фотокамеры (DSC).Протоколы не предоставляют никаких функциональных возможностей для запуска новых изображений или настройки управления экспозицией.Вы застрянете, используя SDK для конкретной камеры.Если вам нужна поддержка нескольких поставщиков, у Nikon есть SDK, который обеспечивает аналогичную поддержку, что и Canon SDK для своих камер.

Более подробную информацию о PTP и MTP можно найти здесь:http://en.wikipedia.org/wiki/Picture_Transfer_Protocol и http://en.wikipedia.org/wiki/Media_Transfer_Protocol

Редактировать

Я забыл упомянуть об этом ВИА может быть вам интересно, при условии, что драйвер вашей камеры предоставляет интерфейс WIA.

Комментарий от TallGanglyGuy неверен.ptp действительно позволяет вам запускать новые изображения, изменять экспозицию и т.д.Некоторые камеры имеют встроенное программное обеспечение, которое предоставляет доступ только к некоторым командам ptp.

PTP поддерживает обычные элементы управления устройством, такие как фотосъемка, так что пользователь может использовать преимущества комбинации ПК / камеры новыми и различными способами, не требуя дополнительного программного обеспечения.

попробуйте мой фреймворк Eos: https://github.com/esskar/Canon.Eos.Framework

ИМХО, это лучшая альтернатива, чем файл .cs, который поставляется вместе с SDK.

Это действительно общее, но это может помочь.

Мне пришлось написать приложение, которое использовало два разных сканера штрих-кода от двух разных поставщиков с разными SDK.Я создал интерфейс, который определял методы и события, для которых я хотел создавать код, а затем написал классы адаптеров, которые реализовали мой интерфейс.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top