Использование AlphaBlend() и FillRect()
Итак, я использую AlphaBlend() для копирования прямоугольника из одного HBITMAP в другой.
Это работает, но есть проблема. Всякий раз, когда я использую функцию FillRect(), альфа-значения в HBITMAP сбрасываются до 0. Каждый раз.
Поэтому я должен GetDIBits(), сбросить альфа обратно на 255, а затем SetDIBits() после каждого вызова функций Win32 API, таких как FillRect().
Итак, есть ли способ создать HBRUSH или иначе сказать FillRect() не трогать значения альфа-канала в HBITMAP, на который он будет рисовать?
1 ответ
За исключением AlphaBlend... BitBlt - единственная другая функция GDI, которая каким-либо образом сохранит альфа-канал.
Ваши варианты в основном поэтому:
Переключитесь на использование DIBSections. Это не решит основную проблему GISI apis, перекрывающей альфа-канал, но в качестве DIBSection вы можете избежать дорогостоящего преобразования DDB -> DIB -> DDB, необходимого для исправления альфа-канала. DIBSections дают вам доступ как к HBITMAP, так и к разделу памяти, где хранятся биты битовых карт.
Используйте API рисования с поддержкой альфа- канала, например GdiPlus, вместо GDI.