Как получить диалоговое окно с прозрачными окнами и рисовать примитивы, чтобы они оставались поверх окна, которое рисует потоковое видео? - PullRequest
1 голос
/ 02 февраля 2010

У меня есть элемент управления ActiveX, который содержит одно окно, в котором отображается потоковое видео. У меня есть отдельный диалог, который я создаю в другом окне, которое я сделал прозрачным или полупрозрачным различными способами (например, используя SetLayeredWindowAttributes (...) вместе со свойством Layered [для альфа-смешения] диалога или установив прозрачный свойство).

Кроме того, я пытался использовать различные методы, чтобы попытаться заставить окно для диалога всегда рисовать поверх окна потокового видео, но ни один из них не помог мне. Если у меня есть кнопка в диалоговом окне или я рисую на прозрачной поверхности с помощью вызовов LineTo (...), они не остаются в верхней части видео. Я попытался использовать SetWindowPos, чтобы повлиять на z-порядок двух окон, а также попытался изменить свойства диалогового окна, такие как «TopMost», но безрезультатно.

Кто-нибудь пытался сделать что-то подобное для наложенного окна поверх потокового видео и получил z-порядок для работы с окраской переднего окна всегда после потокового видео?

ОБНОВЛЕНИЕ: 02/10/10 - попытался использовать свойство WS_EX_LAYERED с SetLayeredWindowAttributes (...) с использованием LWA_COLORKEY и добился того, что искал. Поскольку многоуровневое свойство не может быть использовано со стилем WS_CHILD, это решение обеспечивает необходимое управление положением оверлейного окна относительно окна с видео. Кроме того, есть некоторые другие странности, которые я пытаюсь устранить. Например, когда окно управления ActiveX с видео встроено во вкладку IE, и я переключаюсь на другую вкладку, элементы управления в окне наложения остаются поверх новой вкладки (когда используется стиль WS_POPUP). Все еще исследуем, будут ли альтернативные средства решения этой проблемы, кроме определения переключателя и скрытия видимости окна.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2010

Свойство WS_EX_LAYERED с SetLayeredWindowAttributes (...) с использованием LWA_COLORKEY обеспечит прозрачность при использовании colorkey. Прозрачное наложение остается перед видео, а активное потоковое видео остается живым. Стиль WS_CHILD не может использоваться с многоуровневым стилем, и поэтому положение окна требует дополнительного управления, если используется WS_POPUP. Дополнительные проблемы могут возникнуть из-за невозможности наложения в качестве дочернего окна. -посмотрите Q обновление.

0 голосов
/ 02 февраля 2010

Это может быть невозможно, большая часть кода вывода видео использует аппаратные наложения, поэтому, если ваше окно находится впереди, наложение либо не будет работать, либо вообще не будет рисовать там, где находятся ваши пиксели.

Аппаратные оверлеи позволяют коду рисования видео представлять кадры в формате, отличном от текущего формата отображения, что может сэкономить много ресурсов ЦП и памяти.

По моему опыту, наложение обычно выполняется в формате YUV, а не в RGB, поскольку многие форматы сжатия видео основаны на YUV.Таким образом, видеооборудование получает некоторые пиксели из изображения YUV, а НЕ из буфера экрана, поэтому вы не можете повлиять на эти пиксели, если не вставите себя в путь кода рендеринга видеопотока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...