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