Отрисовка слоеного окна

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Jack Ferre
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 17.02.2014 (Пн) 14:31
Откуда: Казахстан, Костанай

Отрисовка слоеного окна

Сообщение Jack Ferre » 05.10.2014 (Вс) 9:34

Как на слоеном окне рисовать текст и Blend-функции (add, substract, overlay, invert и др.)?

Пытаюсь отрисовать Flash ролик с прозрачностью. Выглядит красиво, пока в ролике нет вышеуказанного. При добавлении происходят следующие изменения:
  • Векторная графика рисуется как 24 бита + ColorKey
  • Статичный текст обводится прямоугольником цвета фона.
  • Динамический текст рисуется с Blend-функцией "add".
  • Объекты с Blend-функцией рисуются на непрозрачном фоне.
И только битмапы рисуются как 32 бита.

layeredtext.png
layeredtext.png (65.32 Кб) Просмотров: 1061

layeredalpha.png
layeredalpha.png (85 Кб) Просмотров: 1063

1. Исходное изображение.
2. Отрисовка в DC PictureBox-а. Тут всё выглядит как нужно.
3. Отрисовка на слоеное окно. Тут всё печально.

Пробовал рисовать так (результат идентичный):
IViewObjectEx --> CreateCompatibleBitmap --> UpdateLayeredWindow
IViewObjectEx --> CreateDIBSection --> UpdateLayeredWindow
IViewObjectEx --> PictureBox.hDC --> UpdateLayeredWindow

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Отрисовка слоеного окна

Сообщение The trick » 05.10.2014 (Вс) 11:24

Слоеное окно отрисовывается только с учетом альфа канала по формуле Dst.Col= Src.Col + (1 - Src.Alpha) * Dst.Col, альфа приведена к диапазону 0..1, в реальности 0..255
UA6527P


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 60

    TopList