Поделитесь плиз примерчиком (ссылкой, мыслями) как конкретно можно с помощью SampleGrabber'a получать изображение с камеры, затем обсчитывать его на лету и тут же выводить на Preview уже с линиями или текстом поверх этого изображения?
Искал всюду, но нигде конкретных примеров нет, только слова о том, что SampleGrabber это transform filter и если хочется, то с его помощью можно это осуществить. Но как?
Re: Как с помощью SampleGrabber рисовать поверх изображения?
От:
Аноним
Дата:
06.06.07 16:55
Оценка:
Здравствуйте, panteist, Вы писали:
P>Поделитесь плиз примерчиком (ссылкой, мыслями) как конкретно можно с помощью SampleGrabber'a получать изображение с камеры, затем обсчитывать его на лету и тут же выводить на Preview уже с линиями или текстом поверх этого изображения? P>Искал всюду, но нигде конкретных примеров нет, только слова о том, что SampleGrabber это transform filter и если хочется, то с его помощью можно это осуществить. Но как?
Смотри примеры DirectX SDK (DirectShow) там есть примеры transform фильтров. А если конкретно, то есть метод Transform в нем ты получаешь доступ к кадру, рисуешь на нем все что душе угодно, а дальше уже измененный кадр идет дальше (на рендр, файл, вообщем куда угодно)
Удачи
Re: Как с помощью SampleGrabber рисовать поверх изображения?
1. Создаем граф из камеры, SampleGrabber'a и renderer'a.
2. Грабберу задаем нужный медиатип — в каком виде принимать данные (ISampleGrabber::SetMediaType).
0. Делаем свой классик, наследный от ISampleGrabberCB. В нем реализуем одну из функций SampleCB или BufferCB. Грабберу говорим вызывать наш callback (ISampleGrabber::SetCallback).
3. Соединяем фильтры и запуcкаем граф, данные приходят в нашу функцию, в ней рисуем что хотим.
В результате не нужно писать своих фильтров, все делается в пару десятков строк кода.
Re[2]: Как с помощью SampleGrabber рисовать поверх изображен
Здравствуйте, D. Mon, Вы писали:
DM>0. Делаем свой классик, наследный от ISampleGrabberCB. В нем реализуем одну из функций SampleCB или BufferCB. Грабберу говорим вызывать наш callback (ISampleGrabber::SetCallback).
Примечание:
чтоб рисовать на кадре нужно SampleCB, именно в нем оригинальный кадр, а в BufferCB — копия.