24ビットや32ビットでパックされた色画素データ型を定義する

カラーカメラから直接システムメモリにデータを流し込み、それを画像処理する場合などは、24ビットや32ビットでパックされた構造体を定義しなければなりません。このとき、1バイト(8ビット)ごとの色データ Blue, Green, Red, Alpha の並び順が違っていてはいけませんし、バイトの隙間ができてもいけません。

System.Runtime.InteropServices を using して、StructLayout で Explicit を選び、FieldOffset でデータ先頭からのオフセットバイト数を明示してやることで、パックドな構造体の型を定義できます。

VisualStudio の C++ における #pragma pack(1) と同じ作用です。

下記の名前空間の追加をお忘れなく.
using System.Runtime.InteropServices;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// この using 追加を忘れずに. Don't forget to add this sentence.
using System.Runtime.InteropServices;

namespace aaa
{

	[StructLayout( LayoutKind.Explicit)]
	public struct GY_IMG_BPP24
	{
		[FieldOffset(0)] public byte B;
		[FieldOffset(1)] public byte G;
		[FieldOffset(2)] public byte R;
	}

	[StructLayout( LayoutKind.Explicit)]
	public struct GY_IMG_BPP32
	{
		[FieldOffset(0)] public byte B;
		[FieldOffset(1)] public byte G;
		[FieldOffset(2)] public byte R;
		[FieldOffset(3)] public byte A;
	}

}