BMP прозрачный цветовой ключ не отображается правильно

Я использую класс C ++ под названием CSplash который используется для отображения всплывающего окна в центре экрана. Он предназначен для загрузки только растровых типов файлов. Это позволяет прозрачному цветному ключу RGB отображать BMP с прозрачным фоном.


У меня есть изображение PNG.

Прозрачный PNG

Я открыл это изображение в Photoshop и добавил цвет фона (50, 200, 25) в качестве прозрачного ключа.

Image Green BG

Затем я сохраняю это изображение как растровый файл в моем проекте.

введите описание изображения здесь

Я остался с файлом: PowerUp.bmp

В моем коде C ++ я импортировал упомянутый выше класс и в WM_NCCREATE У меня есть следующий код:

CSplash splash = CSplash("PowerUp.bmp", RGB(50, 200, 25));
splash.WindowProc(hWnd, uMsg, wParam, lParam);
splash.ShowSplash();
splash.DoLoop();

Когда я запускаю свою программу, заставка отображается с прозрачным фоном, но не так, как ожидалось. В результате некоторые значки остаются прозрачными.

Всплеск Результат

Как я могу это исправить, чтобы он выглядел точно так же, как прозрачный оригинальный файл PNG?

0

Решение

Проблема, как я вижу, состоит в том, что у вашего исходного png-изображения есть прозрачные части (границы очков не являются строго непрозрачными, а скорее как плавный переход к прозрачному), что является распространенным случаем. Таким образом, наличие абсолютно зеленого фона с изображением выше приводит к тому, что зеленый цвет немного изменяется вокруг границы очков и других изображений. И это не longe (50, 200, 25), это может быть (51, 201, 25) и больше не удаляется CSplash.

Что вам нужно сделать, это сохранить исходный PNG-файл в прозрачном формате, где альфа-канал составляет всего 1 бит (0 или 1, прозрачный или непрозрачный) — таким образом переходы будут потеряны, снова откройте его и снова выполните трюк с зеленым фоном.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]