Libpng,Palette png是不是带有alpha?

Posted

技术标签:

【中文标题】Libpng,Palette png是不是带有alpha?【英文标题】:Libpng, Palette png with alpha or not?Libpng,Palette png是否带有alpha? 【发布时间】:2012-11-14 05:27:12 【问题描述】:

如何知道调色板 png 是否带有 alpha? 我得到关于图像png_get_IHDR的信息

然后我看color_type - PNG_COLOR_TYPE_PALETTE

但是我不知道如何知道这个 png 图像是否有 alpha 通道。

【问题讨论】:

【参考方案1】:

这可能会有所帮助:

if (color_type == PNG_COLOR_TYPE_RGBA || color_type == PNG_COLOR_TYPE_GA)
    *alphaFlag = true;
else

    png_bytep trans_alpha = NULL;
    int num_trans = 0;
    png_color_16p trans_color = NULL;

    png_get_tRNS(png_ptr, info_ptr, &trans_alpha, &num_trans, &trans_color);
    if (trans_alpha != NULL)
        *alphaFlag = true;
    else
        *alphaFlag = false;

【讨论】:

【参考方案2】:

PNG 以两种(或三种)完全不同的方式支持透明度:

    具有独立 alpha 通道(RGBA 或 GA)的真彩色或灰度图像

    (可选)tRNS chunk 中的透明度额外信息。有两种不同的口味:

    2a。对于索引图像:tRNS 块为一个、几个或所有调色板索引指定一个透明度值(“alpha”)。

    2b。对于真彩色或灰度图像:tRNS 块指定应被视为完全透明的单一颜色值(RGB 或灰色)。

如果你对case 2a感兴趣,并且如果你正在使用libpng,你应该看看函数png_get_tRNS()

【讨论】:

以上是关于Libpng,Palette png是不是带有alpha?的主要内容,如果未能解决你的问题,请参考以下文章

使用 libpng 编写 1 位深度的灰度 PNG 会导致图像不正确

No Delegate set : lost message:libpng error: Not a PNG file

libhura的建立

未找到 libpng“png_set_longjmp_fn”

使用 libpng 将位图缓冲区快速编码为 png

OpenGL使用libPng读取png图片