Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Програмно скриншот медиа плеера

1.6K
02 июня 2009 года
Shtirlitz
145 / / 31.07.2006
Всем доброго времени суток!
Возникла задача следующего рода. Необходимо написать exe или dll файл, в котором содержалась бы функция, позволяющая сохранять скриншот проигрывающегося в wmplayer'е видео в файл(bmp например). Возникла идея попытаться перехватить функцию, которая копирует изображение из backbuffera, но это несколько сложновато-то кажется для такой задачи т.к. плеер таких функций явно не импортирует.. Буду благодарен за любой полезный совет.
9.3K
14 июня 2009 года
iridum
175 / / 26.08.2007
Наверное, можно зделать так - 1.найти хендл окна отображения видео, по-моему, сложного тут нету. 2.зделать принтскрин этого окна. 3. сохранить в bmp файл.
602
15 июня 2009 года
KPI Student
265 / / 16.12.2006
Цитата: iridum
Наверное, можно зделать так - 1.найти хендл окна отображения видео, по-моему, сложного тут нету. 2.зделать принтскрин этого окна. 3. сохранить в bmp файл.



4. вставить это в пеинт и наблюдать в пеинте ваше кино (движущуюся картинку). ;)

Насколько я помню, многие плееры используют оверлеи, которые принтскрином не схватываются...

9.3K
15 июня 2009 года
iridum
175 / / 26.08.2007
KPI Student, задача была зделать именно bmp, читай внимательнее и очень сомневаюсь что невозможно будет получить рисунок на этого окна
240
15 июня 2009 года
aks
2.5K / / 14.07.2006
iridum, еслиб все было так просто я думаю автор не задавал бы такой вопрос. =)
KPI Student правильно сказал, что видео там проигрываетмся через оверлей, и при попытке скопировать битмап из HDC окна - ты картинки не получишь. Нет её там.
Сам то попробуй принтскрин сделать окна проигрывателя.
9.3K
15 июня 2009 года
iridum
175 / / 26.08.2007
http://subscribe.ru/blog/comp.soft.prog.qandacpp/post/20060629110540#inf1

Цитата:

Небольшое пояснение (возможно, кому то это будет интересно). Дело в том, что современные видеокарты поддерживают создание так называемых оверлейных поверхностей (overlay surfaces). Оверлей - это аппаратные поверхность, не связанная с первичной графической поверхностью (primary surface) - ее данные находятся в области видеопамяти, отличной от области, занимаемой первичной графической поверхностью. Для оверлея задаются размеры, положение на экране и цветовой ключ (некоторое значение цвета пикселя). Если оверлей/оверлеи существуют, то при формировании изображения на мониторе, в области, в которой находится оверлей, видеокарта анализирует значение цвета пикселей первичной графической поверхности и, если оно равно значению цветового ключа оверлея, данные для вывода на монитор берутся не с первичной, а с оверлейной поверхности.

У оверлеев есть множество применений. Например, они традиционно используются различными приложениями-видеопроигрывателями. Преимущество использования оверлеев в данном случае заключается в отсутствии необходимости обновления изображения текущего кадра (например, при перекрытии окна видеопроигрывателя другим окном). Изображение просто выводится на оверлей, оверлей позиционируется в соответствии с положением окна проигрывателя, а окно проигрывателя заливается однородным редко используемым цветом (например, RGB(16, 0, 16)), значение которого задано в качестве цветового ключа оверлея.

Таким образом, при снятии скриншота рабочего стола, на котором запущен видео проигрыватель, выводящий изображение на оверлей, результирующий растр будет содержать изображение окна проигрывателя с однородно закрашенной областью вывода анимации (проигрываемого в данный момент кадра на скриншоте не будет).



вотблин

5
15 июня 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: aks
Сам то попробуй принтскрин сделать окна проигрывателя.

Зависит от рендерера. Если кин через DirectX показывается то вполне PrintScreen работает.

240
15 июня 2009 года
aks
2.5K / / 14.07.2006
Есстественно зависит. Можно вобще видео рукамидекодировать и покадрово на окне рисовать. =)
7
15 июня 2009 года
@pixo $oft
3.4K / / 20.09.2006
Насколько я помню,в режиме паузы картинку снять всё же можно
В крайнем случае потрошим MPC,там есть аж в меню такой пункт–сделать скриншот
398
17 июня 2009 года
Alexandoros
630 / / 21.10.2005
Есть тупой способ:
1)Отключить хардвар акселерацию
2)снять скриншот стандартно(BitBlt)
3)Включить хардвар акселерацию
:-)

http://www.menasoft.com/blog/?p=30
5
17 июня 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Alexandoros
Есть тупой способ:
1)Отключить хардвар акселерацию
2)снять скриншот стандартно(BitBlt)
3)Включить хардвар акселерацию

Интересно было бы посмотреть на систему, как ее плющить-то будет. :rolleyes:

7
17 июня 2009 года
@pixo $oft
3.4K / / 20.09.2006
Предоставим свободу выбора автору.Пусть пробует все указанные варианты,включая и мой,а потом покажет результаты
14
18 июня 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: hardcase
Интересно было бы посмотреть на систему, как ее плющить-то будет. :rolleyes:


Ну кстати не супер сильно. У Camtasia Studio это один из режимов работы, мол
"а можно я вам акселерацию отключу, а...
у вас и картинка после этого плавненькая будет" :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог