如何知道调色板 png 是否带有 alpha?我得到有关图像的信息png_get_IHDR
之后我看color_type - PNG_COLOR_TYPE_PALETTE
但我找不到如何知道这个 png 图像是否有 alpha 通道。
PNG以两种(或三种)完全不同的方式支持透明度:
具有分离Alpha 通道(RGBA 或 GA)的真彩色或灰度图像
(可选) 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;
}