В приложении - тестовый проект, который передаёт видео-поток с Веб-камеры на SR2D-спрайт для дальнейших неограниченных преобразований (не только цвета и наложения; Sprite.GetPixel позволит даже управлять программой через камеру и распознавать видео вроде OCR в реальном времени). Может, кому-то будет полезно.
Камера воплощена через некое TesoSeeu.ocx, это единственный движок камеры, который у меня заработал сразу и со всеми камерами и без малейших недостатков (хотя к VB6 он не приспособлен и лёг на неё чисто случайно). Но он рисует изображение только на себе и не умеет выводить картинку, а может лишь фотографировать в сырой буфер памяти. Процедуру вывода изображения из оперативки в stream и затем на спрайт я уже подобрал сам; наверняка код требует поправок, которые приветствуются (например, две CopyMemory на кадр, возможно, излишни), но я остановился на рабочем варианте и особо оптимизировать не пытался.
В остальных случаях, насколько мне удавалось изучить, веб-камера с VB6 плохо дружит.
Было два варианта подключения:
1) старый - capCreateCaptureWindow (ненадёжный, зачастую выдаёт пустой экран вместо камеры, а если и включается - всегда тянет, изображение меняется ступенчато; к тому же, при каждом подключении выдаёт неубиваемое окно выбора камеры, которое захлопнуть мне удалось только сторонне запущенным скриптом AHK, т.к. программка VB с WM_CLOSE или SendKeys закрывает его как-то не так, как нужно для корректной работы камеры, а WM_QUIT закрывает вместе с окном самой программы) -
2) и новый, DirectShow (но он плохо совместим c VB6 и сложный, все "готовые" разработки в сети я проверил, и они не работают, к тому же там ручной выбор камеры, среди камер много мусора и т.д.).
Были в интернете и различные вебкамерные OCX специально для VB6 с готовыми проектами, но у меня хорошо не заработал НИ ОДИН из них (кроме WebCamX, но тот вообще не имеет вывода кроме как в файл).
А этот работает чётко, см. вложение.
(ДАЛЬНЕЙШИЕ ДОБАВЛЕНИЯ:
1. Последняя версия здесь. Вложение устарело.
2. С этим OCX нужно придерживаться правила: если камера открыта по OpenCapDev, нельзя вызывать GetDevCnt и GetDevNam, иначе при закрытии камеры зависает. Перед обновлением списка камер нужно закрыть прежде открытое устройство командой CloseCapDev.
3. Постфактум подчёркиваю, что это проект конкретно для движка SR2D. Просто отобразить камеру на VB6 можно вообще одной строчкой, а вот перевести её изображение в формат, приемлемый для СПРАЙТА и для его дальнейшей обработки, и было моей задачей. Код содержится в Form1 и сделан сугубо для тестирования; остальное движок.)