Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Определить значения RGB пикселя в окошке воспроизведения
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
skyled
Borland C++. Нужно во время воспроизведения видео определять и записывать в файл значения пикселей. Расположение пикселей определяется картинкой с внешним видом конструкции. Для простоты пока можно просто массивом координат этих пикселей. А вообще задумка в том, чтоб перемещая картинку с расположением пикселей получать разное изображение на изделии (каждый пиксель будет там отображаться RGB светодиодом. Подскажите как мне это сделать? Спасибо.
neiver
Стандартный метод сдесь с помощью WinApi создать контекст устройства для монитора:
CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL);
и использовать функцию GetPixel - она вернет цвет пикселя с указанными координатами.

Однако тут естьзасада с тем, что потоковое видео на современных(и не очень) видеокартах воспроизводится через так называемый оверлейный буффер. При этом картинка из видеозаписи на попадает во фреймбуфер, а отображается сразу на монитор(упрощенно говоря). И вместо цвета пикселя их вашего видео GetPixel вернет цвет фона окна, где оно(видео) воспроизводится. Чтобы этого избежать нужно чтобы видео воспроизводилось через программый кодек без аппаратного ускорения. Как это сделать зависит от конкретной программы (или видеокарты). Как-то так.
XVR
Откуда у вас берется видео? Скорее всего вам надо смотреть в сторону DirectShow (99% программ для воспроизведения чего угодно используют именно его). В DS вам нужно будет вклинится в граф воспроизведения вашего видео (там, где уже есть раскодированный поток) и извлекать из него нужные биты. Возможно придется написать DS Filter (для вклинивания в граф).

В любом случае это не задача для Borland C++. Хотя управляющую морду для этого всего на нем написать можно smile.gif
sigmaN
Можно сделать по первому методу испоользуя Media Player Classic из пакета K-Lite codec pack. В настройках плеера(output) есть много различных вариантов вывода картинки в окно.
Чтобы проверить годится ли выбранный вариант: запускаем видео, жмем Print Screen, в пэинт вставляем. Если видео видно - значит это оно, а если чёрный квадрат, то ничего не выйдет и надо менять параметры.
Student Pupkin
Цитата(sigmaN @ Oct 13 2010, 02:01) *
Можно сделать по первому методу испоользуя Media Player Classic из пакета K-Lite codec pack. В настройках плеера(output) есть много различных вариантов вывода картинки в окно.
Чтобы проверить годится ли выбранный вариант: запускаем видео, жмем Print Screen, в пэинт вставляем. Если видео видно - значит это оно, а если чёрный квадрат, то ничего не выйдет и надо менять параметры.

Коль пошла такая пьянка smile.gif
Объясните мне - штука такую видел в winxp (а в семерке сделать уже не получается sad.gif , хотя мож дело в видеокарте...).
1. Включаю Media Player Classic. Ставлю на паузу. Делаю принт-скрин. Сохраняю картинку в bmp-формате. Открываю эту картинку просмотрщиком картинок (пробовал тот же паинт, office picture manager). Вижу картинку.
2. Закрываю Media Player - в картинке черный квадрат. sad.gif
3. Снова открываю Media Player, запускаю любое видео - в окне просмотрщика картинок вижу тоже самое видео...
huh.gif
neiver
Видео оверлей
sigmaN
Student Pupkin, дело точно не в видеокарте, я сам проводил такой эксперимент. В пэинте получается как-бы дырка, через которую видно окно плеера. Подвигав пэинт, можно в этом убедиться. А вот почему так получается - я не знаю. Во время скриншота в общем там не чёрный цвет получается, а окно в овернлей что-ли.... ))
neiver
Я уже писал, почему так происходит.

Википедия
Цитата
As a consequence of hardware overlay use, a screenshot program (for example, the one automatically built into Windows that activates when a user presses the PrtSc key) often does not capture the content appearing in the hardware overlay window. Rather, a blank region containing only the special mask color is captured. This is because the screen capture routine doesn't consider the special video memory regions dedicated to overlays - it simply captures the shared main screen as rendered by the software's graphical subsystem. Some Digital Rights Management schemes use hardware overlay to display protected content on the screen, taking advantage of this quirk to prevent the copying of protected documents by way of screen capture[citation needed]. Disabling the support for overlays causes the normal overlay-using software to fallback to the shared memory, thus enabling screenshot capture.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.