gpt4 book ai didi

c# - 将 BGR 位图转换为 RGB

转载 作者:行者123 更新时间:2023-11-30 22:13:23 26 4
gpt4 key购买 nike

我正在从网络摄像头的缓冲区中获取位图。当我将它们分配给 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

关于c# - 将 BGR 位图转换为 RGB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19187737/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com