Под Win32 это обычная техника для генерации монохромной битовой маски из битовой карты для использования прозрачности, выполняя следующие действия:
SetBkColor(hdcSource, clrTransparency);
VERIFY(BitBlt(hdcMask, 0, 0, bm.bmWidth, bm.bmHeight, hdcSource, 0, 0, SRCCOPY));
Это предполагает, что hdcSource является DC памяти, содержащим исходное изображение, иhdcMask - это DC памяти, содержащий монохромное растровое изображение одинакового размера (поэтому оба имеют размер 32x32, но источник имеет 4-битный цвет, а цель - 1-битный монохромный).
Однако, мне кажется, что это не работает, когдаИсточник 32-битный цвет + альфа.Вместо монохромного растрового изображения в hdcMask, я получаю маску, которая полностью черная.Биты не устанавливаются в белый цвет (1).Принимая во внимание, что это работает для 4-битного источника цвета.
Мой search-foo не работает, так как я не могу найти никаких ссылок на эту конкретную проблему.
Я выделил, что это действительно проблемав моем коде: т.е. если я использую исходное растровое изображение 16 цветов (4 бита), оно работает;если я использую 32-битное изображение, оно создает полностью черную маску.
Есть ли альтернативный метод, который я должен использовать в случае 32-битных цветных изображений?Есть ли проблема с альфа-каналом, который перекрывает нормальное поведение вышеупомянутой техники?
Спасибо за любую помощь, которую вы можете предложить!
ДОБАВЛЕНИЕ: Я все еще не могу найти техникуэто создает действительное монохромное растровое изображение для моего исходного растрового изображения, созданного в GDI +.
Я несколько смягчил свою конкретную проблему, просто вообще не генерируя монохромную битовую маску, и вместо этого я использую TransparentBlt (), который, кажется,это правильно (но я не знаю, что они делают внутри, это отличается от того, что позволяет им правильно маскировать изображение).
Может быть полезно иметь действительно хорошую работающую функцию:
HBITMAP CreateTransparencyMask(HDC hdc, HBITMAP hSource, COLORREF crTransparency);
Где всегда создается действительная маска прозрачности, независимо от глубины цвета hSource.