我有一个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
。
答案 0 :(得分:1)
很难说你是否没有告诉我们细节(你如何计算像素数?)
一种可能的解释是,您忘记考虑每个PNG行前面都有一个字节,该字节告诉应用该行的“过滤器”(ref)。因此,IDAT块内的总字节数(在ZLIB压缩之前;并且不要忘记可以存在许多IDAT块,您必须附加所有这些块)是
Bytes = Rows x (1 + Cols x BytesPerPixel)
如果您的图像是16位灰度(BytesPerPixel = 2),并且您正在计算Pixels = Rows x Cols = Bytes / BytesPerPixel,那么这将解释差异。