●
画像ファイル先頭部分
先頭部分には、赤枠で囲んだ識別文字列があります。
少なくとも先頭の 'PNG' は見張っていた方がいいでしょう。
青枠で囲んだ画像サイズ情報も重要です。他の画像フォーマットと違って、Big Endian です。注意ください。
[ パレットのない場合 ]
データ('IDAT') はドットごとの色情報を3バイトごと(RGB順,8bit のとき)もしくは6バイトごと(16 bit のとき)に示しています。
[ パレットのある場合 ]
データ('IDAT') が出る前に3バイトごと(RGB順)のパレットがでてきます。
この場合、データはRGB値ではなく、パレットのシリアルを表現しています。
[ カラータイプ=3は tRNS チャンクあり ]
tRNS チャンクはα値をパレットデータ数だけ格納しています。
このα値は8ビットで、0はすべて背景、255はすべて画像、中間は、
R表示値 = Rファイル値 * α/255 + (背景)*(255-α)/255
という計算をしてモニタ上に表示するようです。
ファイル変換のときは、しょうがないので、背景=255 とせざるを得ません。
●
画像ファイル最終部分
ここには、'IEND' という終了文字列があります。
これでファイルの最終であることを確認できます。