В приложении MFC.Использование панели инструментов MFC и изображения PNG с прозрачностью, неправильные эффекты прозрачности
Я загружаю 32-битный PNG-файл с битами альфа-канала в Gdiplus :: Bitmap, используя FromFile.
Затем я использую Bitmap :: GetHBitmap для извлечения HBITMAP из Gdiplus :: Bitmap.
Я использую этот дескриптор, чтобы добавить растровое изображение в изображение.
Я использую этот imagelist для добавления кнопок панели инструментов на панель инструментов.
Однако по какой-то причине изображение не использует альфа-канал, как ожидалось. Вместо того, чтобы использовать альфа-канал для определения прозрачности, он использует комбинацию альфа-канала и как близко цвет пикселя к белому (0x ?? FFFFFF) для вычисления прозрачности. Таким образом, изображение с постепенно прозрачными белыми пикселями вообще не отображается, но изображение с прозрачно прозрачными черными пикселями отображается правильно.
Я позже отредактировал код, чтобы гарантировать, что мой битмап в HBitmap использует прозрачный цвет фона, а цвет фона в imagelist и панели инструментов прозрачен и имеет те же результаты.
Я также использовал HBITMAP для получения CBitmap и предварительно умножал битмапбит с использованием метода AlphaBlend(), чтобы рисовать на окне, и это правильно рисует.
Я убедился, что в моем списке изображений используется 32-битная настройка изображения - флаг ILC_COLOR32.
Итак, я знаю, что проблема заключается в том, как изображение добавляется либо в изображение, либо в панель инструментов, но не может понять, как исправить это.
Это все сделано динамически, поэтому у меня нет той же проблемы, что люди жалуются на VisualStudio, удаляя альфа-канал.
Когда вы создаете imagelist, вы указываете флаг 'ILC_COLOR32'? –
Да, я указываю, что флаг –
Почему вы потратили столько времени * описывая * ваш код вместо * размещения * его? Гораздо проще отладить проблему, если я могу прочитать исходный код. –