【问题标题】:PNG Truecolor with tRNS Chunk带有 tRNS 块的 PNG 真彩色
【发布时间】:2014-06-29 22:35:14
【问题描述】:

我想确认我对 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?

谢谢!

【问题讨论】:

    标签: png


    【解决方案1】:

    你的解释是正确的。

    如果颜色是透明色之一,我需要查找,

    实际上不是“一种”,而是一种透明颜色:在真彩色+TRNS场景中,除了一种颜色之外,所有颜色都是不透明的。

    对于这种情况,什么是好的 LUT?

    我认为这种情况与 LUT 无关。将此格式视为存储具有“硬”(是/否)透明度的真彩色图像的有效方法。解码器通常会解码添加 alpha 通道的图像(然后实际上会忽略颜色)(例如,您可以在此处看到 lineToARGB32 方法)或忽略 TRNS。

    请注意,这种真彩色+TRNS的情况并不常见,这种格式的PNG图片并不多,很多读者只是忽略了这种情况下的TRNS。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      • 2011-09-18
      • 2016-07-24
      • 1970-01-01
      相关资源
      最近更新 更多