首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将BGR位图转换为RGB

将BGR位图转换为RGB
EN

Stack Overflow用户
提问于 2013-10-04 17:55:59
回答 1查看 7.2K关注 0票数 2

我正在从一个网络摄像头上得到一个缓冲区的位图。当我把这些分配给一个PictureBox时,红色和蓝色是相反的。

我能对位图或PictureBox做些什么才能把红色和蓝色放在合适的位置?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-04 19:54:43

以下代码执行所需的转换:

代码语言:javascript
复制
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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19187737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档