Делаем фото с веб камеры.
Используем стандартную библиотеку Windows Image Acquisition Automation Library. Библиотеку wiaaut.dll качаем (из инета, бесплатно), регистрируем командой regsvr32.
Используем стандартную библиотеку 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 предпочтительнее тем, что не тратится время на «разогрев» камеры (время на включение, на настройку яркости).
Нормуль, робит
Для 8.*
Device = Новый COMОбъект(«WIA.CommonDialog»);
Image = Device.ShowAcquireImage();
Если НЕ Image=Неопределено Тогда
Image.SaveFile(Файл);
КонецЕсли;
(0) Иди суды я тя расцалую… прям вот вовремя ты это дело выложил.. я уже думал писать придется 🙂
WIA.CommonDialog у меня не стартует. Точнее где-то стартует, а где-то нет. Сам недавно писал что-то подобное, но когда перенес на теститрование на W7 с XP 1C-ка начала такие ошибки выдавать, что гугл завернулся (и я вместе с ним).Вот эта штука работает везде. Рекомендую.
(4) dusha0020, Мне тот вариант как-то не очень понравился (каждый раз настройки выскакивали… иногда v7 выкидывало)… а тут постабильнее получилось (в сети магазинов используется)… из всех вариантов этот самым удачным получился.
(5) Да там есть проблемы с корректной остановкой компоненты, но как-то удалось стабилизировать. Перестал открывать — закрывать камеру для каждой фотки и заработало стабильно. Плюс выбор параметров устройства позволяет на навороченных камерах все-таки подстраивать разрешение и глубину цвета перед началом съемки. На последнем тесте дети 20 минут себя фоткали по всякому и никаких сбоев.
WIA, однако, пригодилась в другом месте. Так пригодилась, что даже публикацию делаю по мотивам. О подробностях естественно пока умолчу:)
(6) dusha0020, не срослось с публикацией?
(7) mikmike,http://infostart.ru/public/176247/
(8) dusha0020, спасибки за оперативность. Ссылка попала в мой архив — мало ли когда пригодиться сможет.
В примере 2 когда сразу веб-камера фотографирует, то чаще всего фотография сохраняется как половинчатая, как будто изображение не успевает сфотографироваться. Скажите, как можно избавиться от этой ошибки?
(10) dddonnn, было и у меня такое (на некоторых web-камерах).. мне помогло: пауза после …ExecuteCommand(… Скокато милисекунд (подбирается по ситуации).. После этого есть надежда, что фото готово и можно уже дальше работать (делать …Transfer(… и ….SaveFile(… )
Количество = Device.DeviceInfos.Count; на Win 7 возвращает 0. Подскажите, как бороться с этим траблом?
(12) dddonnn, знал бы прикуп, жил бы в Сочи.. Используйhttp://infostart.ru/public/84693/
Количество = Device.DeviceInfos.Count; на Win 7 возвращает 0. Подскажите, как бороться с этим траблом? Может кто все-таки поборол?
Для первого примера в той же семерке
{D:DB1C77ВЕБКАМЕРАEXTFORMSПРИМЕР.ERT(73)}: WIA.CommonDialog.1: Не доступно ни одно WIA-устройство выбранного типа.
Кто-нибудь на 7 винде работал с wia???
(15) kitminsk, Верно.. там не робит.. поэтому пришлось другое использовать
а как сделать чтобы
Device = Новый COMОбъект(«WIA.CommonDialog»);
вызова диалога не было?