2013-04-21 62 views
0

我有一個PNG文件。我解壓縮了IDAT塊,並將其讀取爲16位顏色(每像素16位)並將它們保存在一維數組中。 PNG文件是126x128(wxh)。但是我有的像素數(數組長度)是16,192。因此:PNG像素數不同?

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

什麼是64像素過剩?

編輯

謝謝您的回覆(評論和答案),尤其是@leonbloy。

值16,192(我得到的像素)實際上是34,384字節的數據,我已經把它與BytesPerPixel分開。

+0

16位灰度? – leonbloy 2013-04-21 16:17:36

+0

Leonboy是對的。在每行的開頭都有一個額外的字節,以便可以針對圖像的不同部分以不同方式對行進行預過濾。順便說一句,你可以指責這一點。 :-) – 2013-04-22 12:24:35

回答

1

很難說,如果你不告訴我們的細節(你是如何計算的像素數?)

一個可能的解釋是,你忘了考慮到每個PNG行由前置帳戶一個字節,告訴應用於該行的「過濾器」(ref)。因此,IDAT塊內的字節總數(ZLIB壓縮前;不要忘記,可以有很多IDAT塊,你必須將其追加全部)是

Bytes = Rows x (1 + Cols x BytesPerPixel) 

如果圖像是16位灰度(BytesPerPixel = 2),並且您計算像素=行x Cols = Bytes/BytesPerPixel,那麼這將解釋差異。