【发布时间】:2012-11-14 05:27:12
【问题描述】:
如何知道调色板 png 是否带有 alpha?
我得到关于图像png_get_IHDR的信息
然后我看color_type - PNG_COLOR_TYPE_PALETTE
但是我不知道如何知道这个 png 图像是否有 alpha 通道。
【问题讨论】:
如何知道调色板 png 是否带有 alpha?
我得到关于图像png_get_IHDR的信息
然后我看color_type - PNG_COLOR_TYPE_PALETTE
但是我不知道如何知道这个 png 图像是否有 alpha 通道。
【问题讨论】:
这可能会有所帮助:
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;
}
【讨论】:
PNG 以两种(或三种)完全不同的方式支持透明度:
具有独立 alpha 通道(RGBA 或 GA)的真彩色或灰度图像
(可选)tRNS chunk 中的透明度额外信息。有两种不同的口味:
2a。对于索引图像:tRNS 块为一个、几个或所有调色板索引指定一个透明度值(“alpha”)。
2b。对于真彩色或灰度图像:tRNS 块指定应被视为完全透明的单一颜色值(RGB 或灰色)。
如果你对case 2a感兴趣,并且如果你正在使用libpng,你应该看看函数png_get_tRNS()
【讨论】: