Привязка картинок из Windows C # Canon SDK против PTP или MTP - PullRequest
8 голосов
/ 10 ноября 2009

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

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

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

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

Ответы [ 5 ]

3 голосов
/ 22 января 2010

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

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

2 голосов
/ 07 февраля 2012

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

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

2 голосов
/ 16 августа 2011

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

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

2 голосов
/ 11 ноября 2009

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

EDIT

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

0 голосов
/ 13 ноября 2009

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

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

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

...