Libpng,调色板PN与阿尔法或不?

如何知道调色板PNG是否与阿尔法? 我得到关于图像png_get_IHDR

之后,我看看color_type - PNG_COLOR_TYPE_PALETTE

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

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

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

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

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

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

如果您对2a情况感兴趣,并且您正在使用libpng,则应该查看函数png_get_tRNS()

这可能有助于:

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