PNG真彩色与tRNS块

5
我想确认我的PNG文件格式解释是否正确,其中颜色类型为0x02且tRNS块存在。PNG网站上写道:

对于颜色类型为0或2的图像,无论图像位深度如何(参见7.1:整数和字节顺序),每个样本使用两个字节。指定灰度样本值或RGB样本值的像素被视为透明(相当于alpha值为0);所有其他像素应被视为完全不透明(alpha值为2bitdepth-1)。如果图像位深度小于16,则使用最低有效位,其余位为0。

给出相同的tRNS块:

Length: 6
Type: tRNS
Data: 00 ff 00 ff 00 ff 
CRC: 37581b7d

这是否意味着RRGGGBBB:0xFFFFFF或白色被视为透明,其他颜色保持不变?如果是这样,对于一般情况,我需要构建一个这样的颜色数组(例如int数组),在解码IDAT块时,我需要查找颜色是否是透明色之一,如果是,它将被视为(RRGGBBAA) 0xRRGGBB00 ,或者完全透明?对于这种情况,什么样的LUT会比较好呢?
谢谢!
1个回答

5

你的理解是正确的。

我需要查找是否颜色是其中一种透明色。

实际上不是“其中一种”,而是 唯一的 透明颜色:在Truecolor+TRNS情况下,所有颜色都是不透明的,除了一种。

这种情况下应该使用什么样的LUT?

我认为这种情况与LUT无关。将此格式视为存储具有“硬”(是/否)透明度的真彩图像的有效方式。解码器通常会通过添加alpha通道来解码图像(然后颜色事实上会被忽略),也可以通过忽略TRNS来解码图像(例如,您可以在这里查看lineToARGB32方法)。请注意,这种Truecolor+TRNS情况并不常见,没有多少PNG图像采用这种格式,许多阅读器在这种情况下会忽略TRNS。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接