C # Alpha Blend Transparent PictureBox

У меня в форме отображается канал с веб-камеры, и я хочу рисовать поверх него. Я собирался сделать это с помощью графического блока, я обнаружил, что PictureBox не поддерживает истинную прозрачность, а только цвет формы, в которой он находится. Он также не поддерживает альфа-смешение, как я бы хотел, чтобы он отображался, аналогично тому, как могут отображаться формы.

Кто-нибудь знает как это сделать? Или у вас есть элемент управления, который может это сделать?


person PeteT    schedule 27.05.2009    source источник


Ответы (3)


Прозрачность в Windows Forms нарушена. Как вы обнаружили, на самом деле он не поддерживает перекрывающиеся элементы управления; он просто показывает цвет фона формы через прозрачные части. С помощью магии Windows API вы можете сделать так, чтобы многие элементы управления отображались по-настоящему прозрачными с поддержкой перекрытия, например эта статья Боба Пауэлла демонстрирует. Мне удалось заставить его технику работать с ярлыками и настраиваемыми элементами управления, но я думаю, что я пытался заставить ее работать для PictureBox с разочаровывающими результатами. Одним из обходных путей может быть попытка создать настраиваемый элемент управления, который вручную рисует изображение; Я не пробовал. Вот сообщение на форуме, в котором я демонстрирую настраиваемый элемент управления, поддерживающий истинную прозрачность (мой дескриптором на этом форуме является AtmaWeapon.) Моя память, кажется, подсказывает, что это лучше всего работает для настраиваемых элементов управления из-за некоторой очевидной магии, которая происходит с элементами управления Microsoft при их рендеринге.

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

person OwenP    schedule 28.05.2009

В большинстве случаев OwenP делает это с помощью метода, продемонстрированного Бобом Пауэллом в transcontrols будет работать. Однако, поскольку это был интерфейс прямого рисования для веб-камеры, прямая трансляция всегда казалась поверх других элементов управления.

Чтобы решить эту проблему, я немного схитрил и создал вторичную форму, которая открывается поверх видеопотока - у нее не было границ, она всегда была сверху и с учетом прозрачности - я нарисовал прямо на этой форме. Затем мне просто пришлось обработать несколько событий в этой вторичной форме, чтобы сосредоточиться на исходной форме и обрабатывать, когда используется другая программа.

person PeteT    schedule 04.06.2009

Вы можете поместить PictureBox в другую отдельную форму и использовать значение непрозрачности форм в категории «Стиль Windows». Это сработает?

person Community    schedule 28.05.2009
comment
Нет, это не так. Прозрачность графического окна проста, она просто получает задний цвет элемента управления, к сожалению, он закончился - person PeteT; 04.06.2009