BMPのファイルヘッダとインフォヘッダを定義する

C# では、Bitmap や BitmapImage などの画像を扱うクラスがあるので、画像ファイルのヘッダなどを意識する必要はありません。

しかし、C や C++ 時代の自作ライブラリなどを移植する場合は BITMAPFILEHEADER や BITMAPINFOHEADER を定義する必要があるかもしれません。

下記のサンプルのように構造体を定義してください。

BITMAPFILEHEADER が14バイトを占めます。
BITMAPINFOHEADER が40バイトを占めます。

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

[StructLayout(LayoutKind.Explicit, Pack = 1)]
public struct BITMAPFILEHEADER
{
	[FieldOffset(   0 )] public        UInt16        bfType               ;
	[FieldOffset(   2 )] public        UInt32        bfSize               ;
	[FieldOffset(   6 )] public        UInt16        bfReserved1          ;
	[FieldOffset(   8 )] public        UInt16        bfReserved2          ;
	[FieldOffset(  10 )] public        UInt32        bfOffBits            ;
}

[StructLayout(LayoutKind.Explicit, Pack = 1)]
public struct BITMAPINFOHEADER
{
	[FieldOffset( 0)] public UInt32 biSize;
	[FieldOffset( 4)] public Int32  biWidth;
	[FieldOffset( 8)] public Int32  biHeight;
	[FieldOffset(12)] public UInt16 biPlanes;
	[FieldOffset(14)] public UInt16 biBitCount;
	[FieldOffset(16)] public UInt32 biCompression;
	[FieldOffset(20)] public UInt32 biSizeImage;
	[FieldOffset(24)] public Int32  biXPelsPerMeter;
	[FieldOffset(28)] public Int32  biYPelsPerMeter;
	[FieldOffset(32)] public UInt32 biClrUsed;
	[FieldOffset(36)] public UInt32 biClrImportant;
}