【问题标题】:PNG pixel count is different?PNG像素数不同?
【发布时间】:2013-04-14 12:52:12
【问题描述】:

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

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

这 64 像素超出了多少?

编辑

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

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

【问题讨论】:

  • Leonboy 说得对。每行的开头都有一个额外的字节,因此可以针对图像的不同部分以不同的方式对行进行预过滤。顺便说一句,你可以怪罪于此。 :-)

标签: image png


【解决方案1】:

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

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

Bytes = Rows x (1 +  Cols x BytesPerPixel)

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

【讨论】:

    猜你喜欢
    • 2014-12-14
    • 2021-09-26
    • 2012-10-06
    • 2010-09-22
    • 2014-03-19
    • 2014-11-04
    • 2018-05-04
    • 2019-10-23
    • 1970-01-01
    相关资源
    最近更新 更多