如何在不丢失alpha通道的情况下使用CImg库打开PNG?

时间:2012-08-23 02:42:17

标签: c++ png alpha cimg

当我打开png文件时:

CImg<unsigned char> image("image.png");

...我希望得到4通道(RGBA)图像。但我总是得到3通道(RGB)图像(即使图像是半透明的):image.spectrum()返回3而不是4。

在我的应用程序中,打开PNG文件时总是需要获得4个通道。 CImg看起来像流行的库,有许多有用的功能(其中一些可能在我的图像处理应用程序中有用),所以我发现很难相信用alpha通道打开PNG文件而不会丢失它是不可能的。有什么建议吗?

如果CImg不是用于处理PNG文件的非常好的工具,请随意建议一些其他简单易用的库。对我来说,唯一重要的是能够读取和写入PNG作为4通道无符号字符图像,并具有获取图像尺寸和数据的功能(如image.width()或image.data())。

2 个答案:

答案 0 :(得分:3)

CImg是一个非常好的库,可以使用.png文件(包括4个频道)。 对于CImg对png文件的本机支持,您需要将代码与libpng库链接,否则CImg将使用对ImageMagick的转换工具的外部调用来读取.png文件。 要在CImg中启用完整的.png支持,只需使用定义的'cimg_use_png'宏编译代码,并将其与libpng链接,然后就完成了:

g++ -o foo foo.cpp -Dcimg_use_png -lpng -lz -lX11 -lpthread

我发现CImg是最完整支持.png和.tiff文件的库之一,您只需要定义一些配置标志以允许它使用正确的库。 默认情况下,CImg配置为使用最少的库集。

答案 1 :(得分:0)

对另一个图书馆的建议(我已经使用过,imo非常简单):http://www.imagemagick.org/script/api.php#c