CImg не отображает прозрачные изображения PNG правильно?

Я использую CImg в сочетании с libpng в Visual Studio 2010 для отображения изображений PNG.
Когда я отображаю изображение с помощью CImg, кажется, что оно неправильно отображает прозрачность.
Я не подаю в суд, если это я не до конца понимаю концепции CImg, ошибку, которую я совершаю, или их комбинацию!

изображение, показывающее описанную проблему

Изображение слева показывает изображение, открытое в программе просмотра фотографий Windows, с прозрачным фоном, как и ожидалось.
Изображение справа показывает дисплей CImg, который фактически отображает чистый белый фон с некоторыми странными коричневыми областями, окружающими персонажа.

CImg загружает PNG с помощью 4-го альфа-канала (как показано в заголовке окна с правым изображением). При наведении курсора на области на экране CImg отображаются правильные значения прозрачности в небольшом всплывающем окне (внизу слева на правом изображении). CImg, кажется, рисует все, независимо от значения прозрачности?

У меня вопрос, как мне заставить Cimg правильно отображать pgn с прозрачными разделами?

Мой код для этого примера выглядит следующим образом:

#define cimg_use_png
#include <CImg.h>
using namespace cimg_library;

int main()
{
CImg<unsigned char> image("image.png");
image.display();
return 0;
}

3

Решение

Средство просмотра по умолчанию CImg просто показывает 3 первых канала вашего изображения.
Он даже игнорирует, что 4-й канал действительно является каналом прозрачности, это может быть что-то еще (например, K-канал для изображения в кодировке CMYK). CImg не хранит такую ​​информацию, она позволяет пользователю узнать, что он в конце концов манипулирует.
Если у вас есть 4-й канал для прозрачности и что для его отображения в CImg, вы должны самостоятельно создать небольшую процедуру рендеринга, например:

CImg<unsigned char> render(img.width(),img.height(),1,3,255);
render.draw_image(0,0,0,0,img,img.get_channel(3),1,255);

(при условии, что ‘img’ — ваше 4-канальное изображение).
Теперь ‘render’ — это цветное изображение RGB, представляющее собой исходное (прозрачное) изображение на белом фоне.

4

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

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

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