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;
}

person TVOHM    schedule 03.01.2013    source источник


Ответы (1)


Средство просмотра дисплея по умолчанию 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-канальное изображение). Теперь «рендеринг» - это цветное изображение RGB, которое представляет собой рендеринг вашего исходного (прозрачного) изображения на белом фоне.

person bvalabas    schedule 03.01.2013