1
A
回答
2
下面的代码将需要转换:
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
是处理位图数据的最快选项(比GetPixel
或SetPixel
快得多)。
循环迭代器(i += 3
)取决于位图的PixelFormat
。这里我假设它是PixelFormat.Format24bppRgb
。对于Format32bppArgb
,它将是i += 4
。
相关问题
- 1. OpenNI RGB图像到OpenCV BGR IplImage转换?
- 2. 在VB中将位图转换为RGB
- 3. 将RGB图像转换为RGB 16位和8位
- 4. 将颜色通道从BGR转换为RGB
- 5. 在OpenCV中将YUV转换为BGR或RGB
- 6. 如何将位图转换为图像<Bgr, Byte>
- 7. 交换Jpeg RGB通道(RGB-> BGR)
- 8. moviepy.editory.VideoFileClip - RGB或BGR?
- 9. 如何将24位RGB转换为8位RGB
- 10. 转换32位rgb图像为8位rgb C++
- 11. 将css颜色转换为16位rgb
- 12. 将24位RGB转换为ARGB16
- 13. 将8位颜色转换为RGB值
- 14. 使用OpenCV将12位拜耳图像转换为8位RGB
- 15. MATLAB/Opencv:将24位RGB图像转换为16位灰色
- 16. 将RGB图像转换为灰度和灰度转换为RGB图像?
- 17. 将十进制BGR颜色转换为单独的RGB十进制值
- 18. 如何将图片类型转换为图片<Bgr, Byte>?
- 19. 手动将RGB RGB图像转换为灰度图
- 20. 将YCCK jpeg转换为RGB
- 21. 将RGB值转换为HSV
- 22. ImageSharp将Rgb转换为Hsv
- 23. 将RGB转换为HSV
- 24. 将RGB转换为RGBW
- 25. 将RGB转换为sRGB?
- 26. 将RGB转换为RGBA
- 27. 将0xFF转换为RGB值
- 28. 将RGB转换为灰度?
- 29. Javascript将YUV转换为RGB
- 30. 将HSL转换为RGB
相机的一些问题? –
相机没有问题。这是BGR色彩空间。主要是与endianness有关。令人讨厌的是,因为你通常需要做额外的工作才能使事情顺利进行。 – Kat