いくつかのカメラ (RAW データの配列) からデータをキャプチャしています。
次に、このデータをカラー パレットに従って RGB 値にマッピングします。
できるだけ早くマップする必要があるため、BitmapDdataポインターを使用して安全でないコードでピクセルを使用および編集します。
public void dataAcquired(int[] data)
{
Bitmap bmp = new Bitmap(width, height);
BitmapData data = bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
for (int i = 0; i < data.Length; i++)
{
int x = i % bmp.Width;
int y = i / bmp.Width;
Rgb rgb = mapColors[data[i]];
unsafe
{
byte* ptr = (byte*)data.Scan0;
ptr[(x * 3) + y * data.Stride] = rgb.b;
ptr[(x * 3) + y * data.Stride + 1] = rgb.g;
ptr[(x * 3) + y * data.Stride + 2] = rgb.r;
}
}
bmp.UnlockBits(data);
}
そして、私はすべての受信フレームに対してこれを行っています。正常に動作しますが、320x240 ピクセルのフレームごとに 30 ミリ秒程度かかります。
さらに高速化することは可能ですか?メモリ内のデータを一度だけロック/ロック解除できたかもしれませんが、これについてはわかりません。