我想确认我对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?
谢谢!
答案 0 :(得分:5)
您的解释是正确的。
我需要查看颜色是否是透明色之一
实际上不是“其中之一”而是 透明色:在truecolor + TRNS场景中,除了一个颜色外,所有颜色都是不透明的。
对于这种情况,什么是好的LUT?
我不认为这种情况与LUT有关。可以将此格式视为存储具有“硬”(是/否)透明度的真彩色图像的有效方式。解码器通常会解码添加alpha通道的图像(然后颜色会被事实忽略)(例如,您可以在这里看到lineToARGB32方法)或者忽略TRNS。
请注意,这个truecolour + TRNS情况并不常见,没有很多具有该格式的PNG图像,许多读者在这种情况下只是忽略了TRNS。