0

我有一个PNG文件。我已解压缩 IDAT 块并将其读取为 16 位颜色(每像素 16 位)并将它们保存在一维数组中。PNG 文件为 126x128 (wxh)。但是我拥有的像素数(数组长度)是 16,192。所以:

        16192 <-- pixel I got
126x128=16128 <-- pixel using width and height
        -----
           64 <-- difference

这个 64 像素过剩是什么?

编辑

感谢您的回复(评论和回答),尤其是@leonbloy。

值 16,192(我得到的像素)实际上是 34,384 字节的数据,我已经将它与BytesPerPixel.

4

1 回答 1

1

如果你不告诉我们细节很难说(你是如何计算像素数量的?)

一种可能的解释是您忘记考虑到每个 PNG 行前面都有一个字节,该字节告诉该行应用的“过滤器”(ref)。因此,IDAT 块内的总字节数(在 ZLIB 压缩之前;并且不要忘记可以有很多 IDAT 块,您必须将它们全部附加)是

Bytes = Rows x (1 +  Cols x BytesPerPixel)

如果您的图像是 16 位灰度 (BytesPerPixel=2),并且您正在计算 Pixels=Rows x Cols= Bytes/BytesPerPixel,那么这将解释差异。

于 2013-04-21T16:22:24.547 回答