Пример работы с 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
.ert 49,50Kb
23.10.12
65
.ert 49,50Kb 65 Скачать
ПримерWIA2.ert
.ert 203,50Kb
31.10.12
61
.ert 203,50Kb 61 Скачать

См. также

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