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;
}