Использование AlphaBlend () и FillRect () - PullRequest
1 голос
/ 06 декабря 2009

Итак, я использую AlphaBlend (), чтобы скопировать прямоугольник из одной HBITMAP в другую.

Работает, но есть проблема. Всякий раз, когда я использую функцию FillRect (), альфа-значения в HBITMAP сбрасываются до 0. Каждый раз.

Так что мне нужно GetDIBits (), сбросить альфа обратно на 255, а затем SetDIBits () после каждого вызова функций Win32 API, таких как FillRect ().

Итак, есть ли способ создать HBRUSH или иначе сказать FillRect () не touch значения альфа-канала в HBITMAP, к которому он будет рисоваться?

1 Ответ

4 голосов
/ 06 декабря 2009

За исключением AlphaBlend ... BitBlt - единственная другая функция GDI, которая каким-либо образом сохранит альфа-канал.

Ваши варианты в основном поэтому:

  1. Переключитесь на использование DIBSections. Это не решит основную проблему GISI apis, перекрывающей альфа-канал, но в качестве DIBSection вы можете избежать дорогостоящего преобразования DDB -> DIB -> DDB, необходимого для исправления альфа-канала. DIBSections дают вам доступ как к HBITMAP, так и к разделу памяти, где хранятся биты битовых карт.

  2. Используйте API рисования с поддержкой альфа-канала, например GdiPlus вместо GDI.

...