ネットカムのバッファからビットマップを取得しています。これらを PictureBox に割り当てると、赤と青が逆になります。
赤と青を適切な場所に配置するには、ビットマップまたは PictureBox に対して何ができますか?
次のコードは、必要な変換を行います。
public static void RGBtoBGR(Bitmap bmp)
{
BitmapData data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),
ImageLockMode.ReadWrite, bmp.PixelFormat);
int length = Math.Abs(data.Stride) * bmp.Height;
unsafe
{
byte* rgbValues = (byte*)data.Scan0.ToPointer();
for (int i = 0; i < length; i += 3)
{
byte dummy = rgbValues[i];
rgbValues[i] = rgbValues[i + 2];
rgbValues[i + 2] = dummy;
}
}
bmp.UnlockBits(data);
}
LockBitsメモリ内のビットマップをロックして、コンテンツに直接アクセスして変更できるようにします。安全でないコンテキストを保持したくない場合は、バイト配列を作成し、それを使用Marshal.Copyしてデータをそこにコピーし、操作後にビットマップに戻すことができます。ビットマップ データを操作するには、を使用するのが最速のオプションです (またはLockBitsよりもはるかに高速です)。GetPixelSetPixel
ループ反復子 ( ) は、ビットマップの にi += 3依存します。PixelFormatここでは、 であると想定していますPixelFormat.Format24bppRgb。それFormat32bppArgbはi += 4.