Libpng,调色板png与alpha或不?

时间:2012-11-26 17:21:39

标签: c++ png libpng

如何知道调色板png是否带有alpha? 我获得了有关图片png_get_IHDR

的信息

之后我会看color_type - PNG_COLOR_TYPE_PALETTE

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

2 个答案:

答案 0 :(得分:12)

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

  1. 具有分离的 Alpha通道(RGBA或GA)的真彩色或灰度图像

  2. (可选)tRNS chunk中的透明度额外信息。它有两种不同的风格:

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

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

  3. 如果您对案例 2a 感兴趣,并且如果您使用的是libpng,则应该查看函数png_get_tRNS()

答案 1 :(得分:3)

这可能有所帮助:

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