我想确认我对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
Run Code Online (Sandbox Code Playgroud)
这是否意味着RRGGGBBB:0xFFFFFF或白色被视为透明而所有其他颜色都是原样?如果是这样,对于一般情况,我需要构造一个这样的颜色数组(比如int数组),并且在解码IDAT块时,我需要查看颜色是否是透明颜色之一,如果是,它被视为(RRGGBBAA)0xRRGGBB00,还是完全透明?对于这种情况,什么是好的LUT?
谢谢!
你的解释是正确的.
我需要查看颜色是否是透明色之一,
其实不是"之一",但在透明色:在真彩+ TRNS方案中的所有颜色都除了一个不透明的.
对于这种情况,什么是好的LUT?
我不认为这种情况与LUT有关.可以将此格式视为存储具有"硬"(是/否)透明度的真彩色图像的有效方式.解码器通常会解码图像,添加一个alpha通道(然后颜色会被事实忽略),(例如,你可以在这里看到lineToARGB32方法)或者忽略TRNS.
请注意,这个truecolour + TRNS情况并不常见,没有很多具有该格式的PNG图像,并且许多读者在这种情况下忽略了TRNS.