gifts2017

Пример работы с Web камерой (WIA)

Опубликовал Игорь Высоковских (via) в раздел Программирование - Внешние компоненты

Делаем фото с веб камеры.
Используем стандартную библиотеку Windows Image Acquisition Automation Library. Библиотеку wiaaut.dll качаем (из инета, бесплатно), регистрируем командой regsvr32.

Пример 1: // самый простой (с вызовом диалога) (ПримерWIA.ert)

Device = CreateObject("WIA.CommonDialog");
Image = Device.ShowAcquireImage();
Image.SaveFile(Файл);

Пример 2: // делаем снимок как повезет (ПримерWIA.ert)

Device = CreateObject("WIA.DeviceManager");
Количество = Device.DeviceInfos.Count;
Для ин=1 По Количество Цикл
	Если Device.DeviceInfos(ин).Type = 3 Тогда // тип устройства (VideoDeviceType)
		dev = Device.DeviceInfos(ин).Connect();
		Item = dev.ExecuteCommand("{AF933CAC-ACAD-11D2-A093-00C04F72DC3C}"); // сделать снимок (wiaCommandTakePicture)
		Image = Item.Transfer("{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"); // в формат JPG (wiaFormatJPEG)
		Image.SaveFile(Файл);
		Прервать;
	КонецЕсли;
КонецЦикла;

Пример 3: // выводим на форму изображение с камеры (ActiveX), делаем снимок (ПримерWIA2.ert)

Процедура СделатьФото()
	Item = АктивИксWIA.Объект.Device.ExecuteCommand("{AF933CAC-ACAD-11D2-A093-00C04F72DC3C}"); // сделать снимок
	Image = Item.Transfer("{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"); // в формат JPG (wiaFormatJPEG)
	Image.SaveFile(Файл);
КонецПроцедуры

Процедура ПослеОткрытия()
	АктивИксWIA = СоздатьОбъект("АктивИкс"); 
	АктивИксWIA.УстановитьАтрибут(Форма, "ФАктивИксWIA"); 
	Device = CreateObject("WIA.DeviceManager");
	Количество = Device.DeviceInfos.Count;
	Для ин=1 По Количество Цикл
		Если Device.DeviceInfos(ин).Type = 3 Тогда // тип устройства (VideoDeviceType)
			АктивИксWIA.СоздатьЭУ("WIA.VideoPreview"); 
			АктивИксWIA.Объект.Device=Device.DeviceInfos(ин).Connect();
			Прервать;
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

Вариант ActiveX предпочтительнее тем, что не тратится время на "разогрев" камеры (время на включение, на настройку яркости).


Скачать файлы

Наименование Файл Версия Размер
ПримерWIA.ert 65
.ert 49,50Kb
23.10.12
65
.ert 49,50Kb Скачать
ПримерWIA2.ert 61
.ert 203,50Kb
31.10.12
61
.ert 203,50Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Григорий Богомолов (bog2009) 23.10.12 11:28
2. Григорий Богомолов (bog2009) 23.10.12 11:33
Для 8.*
Device = Новый COMОбъект("WIA.CommonDialog");
Image = Device.ShowAcquireImage();
Если НЕ Image=Неопределено Тогда
Image.SaveFile(Файл);
КонецЕсли;
sevushka; krein; shmellevich; Воронкин; via; +5 Ответить
3. Александр Зубцов (iov) 01.11.12 02:51
(0) Иди суды я тя расцалую... прям вот вовремя ты это дело выложил.. я уже думал писать придется :)
4. Andrey Smirnov (dusha0020) 07.12.12 15:13
WIA.CommonDialog у меня не стартует. Точнее где-то стартует, а где-то нет. Сам недавно писал что-то подобное, но когда перенес на теститрование на W7 с XP 1C-ка начала такие ошибки выдавать, что гугл завернулся (и я вместе с ним). Вот эта штука работает везде. Рекомендую.
5. Игорь Высоковских (via) 07.12.12 15:49
(4) dusha0020, Мне тот вариант как-то не очень понравился (каждый раз настройки выскакивали... иногда v7 выкидывало)... а тут постабильнее получилось (в сети магазинов используется)... из всех вариантов этот самым удачным получился.
6. Andrey Smirnov (dusha0020) 07.12.12 16:20
(5) via, Да там есть проблемы с корректной остановкой компоненты, но как-то удалось стабилизировать. Перестал открывать - закрывать камеру для каждой фотки и заработало стабильно. Плюс выбор параметров устройства позволяет на навороченных камерах все-таки подстраивать разрешение и глубину цвета перед началом съемки. На последнем тесте дети 20 минут себя фоткали по всякому и никаких сбоев.
WIA, однако, пригодилась в другом месте. Так пригодилась, что даже публикацию делаю по мотивам. О подробностях естественно пока умолчу:)
7. Михаил Афанасьев (mikmike) 20.11.13 12:47
(6) dusha0020, не срослось с публикацией?
9. Михаил Афанасьев (mikmike) 20.11.13 13:34
(8) dusha0020, спасибки за оперативность. Ссылка попала в мой архив - мало ли когда пригодиться сможет.
10. dddonnn 28.02.14 10:24
В примере 2 когда сразу веб-камера фотографирует, то чаще всего фотография сохраняется как половинчатая, как будто изображение не успевает сфотографироваться. Скажите, как можно избавиться от этой ошибки?
11. Игорь Высоковских (via) 28.02.14 16:52
(10) dddonnn, было и у меня такое (на некоторых web-камерах).. мне помогло: пауза после ...ExecuteCommand(... Скокато милисекунд (подбирается по ситуации).. После этого есть надежда, что фото готово и можно уже дальше работать (делать ...Transfer(... и ....SaveFile(... )
12. dddonnn 21.04.14 16:19
Количество = Device.DeviceInfos.Count; на Win 7 возвращает 0. Подскажите, как бороться с этим траблом?
13. Игорь Высоковских (via) 22.04.14 06:13
(12) dddonnn, знал бы прикуп, жил бы в Сочи.. Используй http://infostart.ru/public/84693/
Светлый ум; +1 Ответить
14. Vlad (kitminsk) 29.11.14 19:22
Количество = Device.DeviceInfos.Count; на Win 7 возвращает 0. Подскажите, как бороться с этим траблом? Может кто все-таки поборол?
15. Vlad (kitminsk) 29.11.14 19:30
Для первого примера в той же семерке
{D:\DB1C\77\ВЕБКАМЕРА\EXTFORMS\ПРИМЕР.ERT(73)}: WIA.CommonDialog.1: Не доступно ни одно WIA-устройство выбранного типа.
Кто-нибудь на 7 винде работал с wia???
16. Игорь Высоковских (via) 01.12.14 10:55
(15) kitminsk, Верно.. там не робит.. поэтому пришлось другое использовать
17. Андрей (Andrekaa) 23.03.15 15:05
а как сделать чтобы
Device = Новый COMОбъект("WIA.CommonDialog");
вызова диалога не было?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа