2

ネットカムのバッファからビットマップを取得しています。これらを PictureBox に割り当てると、赤と青が逆になります。

赤と青を適切な場所に配置するには、ビットマップまたは PictureBox に対して何ができますか?

4

1 に答える 1

4

次のコードは、必要な変換を行います。

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。それFormat32bppArgbi += 4.

于 2013-10-04T19:54:43.170 に答える