Фотосъемка Цифровой Зеркальной Камерой (Nikon) Из Кода C#.

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

Как оказалось, у производителей цифрозеркальных камер есть специальный SDK, посредством которого можно программно получить доступ и управлять этой самой камерой.

У меня камера Nikon D5200, хотя подобный SDK я вроде тоже видел для Sony и Canon. Цель статьи — рассказать о возможности и показать небольшой пример.

Как известно, если ты знаешь, что что-то можно сделать, то узнать, как это сделать, проще простого.

Итак, что нам нужно: Для начала вам необходимо скачать сам SDK с сайта Nikon: sdk.nikonimaging.com/apply Вам придется зарегистрироваться и стать почетным разработчиком Nikon, причем при регистрации необходимо использовать почтовый ящик организации; общественные почтовые ящики там не принимаются.

Там же вы можете увидеть список поддерживаемых камер; к сожалению, дешевые компактные камеры не поддерживаются.

Во-вторых, для простоты рекомендую использовать уже написанный NikonCSWrapper: sourceforge.net/p/nikoncswrapper/wiki/Главная Далее создайте свой проект (в Visual Studio), подключите ссылку к обертке Nikon и, внимание: скопируйте в каталог с бинарниками следующие файлы: NkdPTP.dll и Type0009.md3 (здесь номера могут отличаться в зависимости от camera), который можно найти в загруженном SDK. Теперь небольшой пример, как фотографировать: Сначала определяем диспетчер устройств:

NikonManager manager = new NikonManager("Type0009.md3");

Затем привязываем обработчик события добавления устройства к менеджеру:

manager.DeviceAdded += manager_DeviceAdded;

В коде обработчика у меня есть этот текст:

void manager_DeviceAdded(NikonManager sender, NikonDevice device) { _device = device; this.Text = _device.Name; _device.ImageReady += _device_ImageReady; }

Здесь я сохраняю ссылку на новое устройство и привязываю обработчик к событию ImageReady, которое будет срабатывать, когда камера сделает фото, причем событие вызывается как при команде сделать фото из программы, так и при нажатии кнопка на самой камере.

Мой обработчик событий фотографирования выглядит так:

void _device_ImageReady(NikonDevice sender, NikonImage image) { MemoryStream ms = new MemoryStream(image.Buffer); Image img = Image.FromStream(ms); ms.Close(); pictureBox1.Image = img; }

Здесь я просто получаю доступ к буферу, в котором находится фотография, и загружаю ее в Image через MemoryStream, который затем отправляю в PictureBox для отображения в форме.

Как вы знаете, с Image обычно можно делать все, что захотите, мой код — всего лишь пример.

Чтобы сделать фото камерой из программного кода, нужно вызвать метод Capture():

_device.Capture();

Ну и при выходе из программы необходимо закрыть диспетчер устройств, иначе вы не сможете к нему подключиться, пока не перезагрузите компьютер:

manager.Shutdown();

В общем, через SDK вы можете делать со своей камерой многое: получать и устанавливать любые(?) параметры камеры, фотографировать, снимать видео, фокусироваться автоматически и вручную (из программы), получать живое видео из видоискателя.

На этом у меня все, надеюсь эта информация кому-то пригодится, спасибо за внимание.

Теги: #C++ #.

NET #Nikon #фотография #sdk #api #автоматическое управление #C++

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.