Я использую класс C ++ под названием CSplash который используется для отображения всплывающего окна в центре экрана. Он предназначен для загрузки только растровых типов файлов. Это позволяет прозрачному цветному ключу RGB отображать BMP с прозрачным фоном.
У меня есть изображение PNG.
Я открыл это изображение в Photoshop и добавил цвет фона (50, 200, 25) в качестве прозрачного ключа.
Затем я сохраняю это изображение как растровый файл в моем проекте.
Я остался с файлом: 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?
Проблема, как я вижу, состоит в том, что у вашего исходного png-изображения есть прозрачные части (границы очков не являются строго непрозрачными, а скорее как плавный переход к прозрачному), что является распространенным случаем. Таким образом, наличие абсолютно зеленого фона с изображением выше приводит к тому, что зеленый цвет немного изменяется вокруг границы очков и других изображений. И это не longe (50, 200, 25), это может быть (51, 201, 25) и больше не удаляется CSplash.
Что вам нужно сделать, это сохранить исходный PNG-файл в прозрачном формате, где альфа-канал составляет всего 1 бит (0 или 1, прозрачный или непрозрачный) — таким образом переходы будут потеряны, снова откройте его и снова выполните трюк с зеленым фоном.
Других решений пока нет …