【问题标题】:How to open PNG with CImg library without losing alpha channel?如何在不丢失 alpha 通道的情况下使用 CImg 库打开 PNG?
【发布时间】:2012-08-18 12:30:53
【问题描述】:

当我打开 png 文件时:

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

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

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

如果 CImg 不是处理 PNG 文件的好工具,请随意推荐一些其他简单易用的库。此刻对我来说唯一重要的是能够将 PNG 读写为 4 通道 unsigned char 图像,并具有获取图像尺寸和数据的功能(如 image.width() 或 image.data() )。

【问题讨论】:

    标签: c++ png alpha cimg


    【解决方案1】:

    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 配置为使用最少的库集。

    【讨论】:

      【解决方案2】:

      对另一个库的建议(我用过,imo 很简单):http://www.imagemagick.org/script/api.php#c

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-03
        • 2014-03-22
        • 2018-10-24
        • 1970-01-01
        • 2019-03-13
        • 1970-01-01
        • 2012-11-24
        • 1970-01-01
        相关资源
        最近更新 更多