7

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

之后我看color_type - PNG_COLOR_TYPE_PALETTE

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

4

2 回答 2

18

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

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

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

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

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

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

于 2012-11-26T18:32:38.397 回答
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;
}
于 2014-07-06T08:48:13.077 回答