Обработка не предназначена для конечного пользователя - только в качестве примера внедрения в свои разработки, нуждающиеся в получении изображения с веб-камеры компьютера. Внешние компоненты, применяющие захват через avicap32.dll, вели себя с рандомным результатом: захотят - подключатся к устройству, не захотят - не подключатся. Искать причину их капризов надоело и было решено сделать компоненту, работающую через DirectX. Подходящая библиотека нашлась быстро: AForge.
Тестировалась на платформе "1С:Предприятие 8.3 (8.3.22.2208)", 32-bit приложение "Тонкий клиент" в файловом и клиент-серверном режимах.
1. Регистрация компоненты
Компонента требует наличия ".NET Framework 2.0" (предварительно установить или лучше просто включить кумулятивную версию 3.5 через панель установки компонентов Windows).
Сохранить файлы из прилагаемого архива (DXWebCam.dll, AForge.Video.DirectShow.dll, AForge.Video.dll, AForge.dll, AForge.Controls.dll) в одну папку, запустить с правами администратора Reg_DXWebCam.cmd (предварительно поправив его под свои пути при необходимости)
2. Применение
ХранилищеКомпоненты = Новый COMОбъект("DXWebCam.MyClass");
ПутьКФайлу = ПолучитьИмяВременногоФайла("png");
//Получить список видео-устройств на ПК
//Возвращается строка со списком видео-устройств, разделитель - запятая
СписокУстройств = ХранилищеКомпоненты.GetDevicesList();
//Номер своей веб-камеры заранее ищем в списке или как угодно оттуда его вычисляем, нумерация идет с нуля.
НомерКамеры = 4;
// OpenCamWindow({Номер камеры}, {Пропуск кадров}, {Скрыть окно}, {Заголовок окна}, {Отступ слева},{Отступ справа}, {Ширина}, {Высота})
// "Номер камеры" - не забываем про нумерацию с нуля
// "Пропуск кадров" - количество пропусков кадра видеопотока (для снижения нагрузки на процессор и потребления памяти. Можно "1" поставить - будет без пропуска)
// "Скрыть окно": "0" не скрывать окно видеопотока, "1" скрыть окно (шпионим?!)
// "Заголовок окна", "Отступ слева","Отступ справа", "Ширина", "Высота" - параметры окна
РезультатОткрытия = ХранилищеКомпоненты.OpenCamWindow(НомерКамеры, 3, 0, "Web-камера...", 200, 200, 640, 480);
//SavePicFromCam({Диалог}, {Путь к файлу})
//"Диалог": 1 - снимаем с дополнительным предупреждением компоненты;
// 0 - снимаем сразу без дополнительного окна диалога
ХранилищеКомпоненты.SavePicFromCam(1, ПутьКФайлу);
//Закрываем окно
ХранилищеКомпоненты.CloseCamWindow();
ХранилищеКомпоненты = Неопределено;