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