PNGのファイルヘッダを定義する

C# では、Bitmap や BitmapImage などの画像を扱うクラスがあるので、画像ファイルのヘッダなどを意識する必要はありません。PNGファイルは、下記のサンプルのように構造体定義することができます。

PNG_SIGNATURE ヘッダが8バイトを占めます。
PNG_IHDR チャンク部が25バイトを占めます。

using System.Runtime.InteropServices; の追加をお忘れなく.

[StructLayout(LayoutKind.Explicit, Pack = 1)]
public struct PNG_SIGNATURE
{
	[FieldOffset( 0)] public byte Data0;
	[FieldOffset( 1)] public byte Data1;
	[FieldOffset( 2)] public byte Data2;
	[FieldOffset( 3)] public byte Data3;
	[FieldOffset( 4)] public byte Data4;
	[FieldOffset( 5)] public byte Data5;
	[FieldOffset( 6)] public byte Data6;
	[FieldOffset( 7)] public byte Data7;
}

[StructLayout(LayoutKind.Explicit, Pack = 1)]
public struct PNG_IHDR
{
	[FieldOffset( 0)] public UInt32  Length;
	[FieldOffset( 4)] public UInt32  ChunkType;
	[FieldOffset( 8)] public UInt32  Width;
	[FieldOffset(12)] public UInt32  Height;
	[FieldOffset(16)] public byte    BitDepth;
	[FieldOffset(17)] public byte    ColorType;
	[FieldOffset(18)] public byte    CompressionMethod;
	[FieldOffset(19)] public byte    FilterMethod;
	[FieldOffset(20)] public byte    InteraceMethod;
	[FieldOffset(21)] public UInt32  Crc;
}