CImg不能正确显示透明的png图片?

3

我正在使用CImg和libpng在Visual Studio 2010中显示png图像。

当我使用CImg显示图像时,它似乎不能正确地显示透明度。

我不确定这是我没有完全掌握CImg的概念,还是我犯了一个错误,或者两者都有!

image showing the problem described

左边的图像显示了在Windows照片查看器中打开的图像 - 背景透明如预期。

右边的图像显示了实际显示纯白背景并带有一些奇怪的棕色区域环绕字符的CImg显示。

CImg使用第4个alpha通道加载png(如右侧图像窗口标题所示)。在鼠标悬停在CImg显示中的区域时,它会在小弹出窗口中显示正确的透明度值(右侧图像底部左侧)。CImg似乎绘制了所有内容,而不管透明度的值是多少?

我的问题是,如何使Cimg正确显示具有透明部分的png?

此示例的代码如下:

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

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

4
CImg的默认显示器只会显示图像的前三个通道。它甚至不知道第四个通道实际上是透明度通道,它也可能是其他东西(例如CMYK编码图像的K通道)。CImg不存储这种信息,它让用户最终了解自己在操作什么。 如果您有一个用于透明度的第四通道,并且想在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彩色图像,它是您的初始(透明)图像在白色背景上的渲染。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接