0

PNGファイルがあります。IDAT チャンクを解凍し、16 ビット カラー (1 ピクセルあたり 16 ビット) として読み取り、1 次元配列に保存しました。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

詳細を教えていただけないとわかりにくいです (ピクセル数はどのように計算していますか?)

考えられる説明の 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 に答える