如何在C#中将原始RGB数据数组转换为位图

本文关键字:数组 数据 转换 位图 RGB 原始 | 更新日期: 2023-09-27 18:29:01

我正试图在C#中将原始RGB24数据数组转换为位图,但在这样做时遇到了麻烦。

这是相应的代码:

using System.Runtime.InteropServices;
byte[] frame;
//... code
frame = new byte[1280 * 960]; 
// code to get the frame
System.Runtime.InteropServices.GCHandle pinnedArray =   
      GCHandle.Alloc(frame, GCHandleType.Pinned);
IntPtr pointer = pinnedArray.AddrOfPinnedObject();
Bitmap bmp = new Bitmap(width, height, 3 * width, 
        PixelFormat.Format24bppRgb, pointer);
MemoryStream JPEGStream = new MemoryStream ();
bmp.Save(filepath, System.Drawing.Imaging.ImageFormat.Bmp);**

我有

"System.Drawing.dll中发生类型为"System.AccessViolationException"的未处理异常"

使用上面的代码。

但是,如果我更改:

Bitmap bmp = new Bitmap(width, height, stride, 
      PixelFormat.Format24bppRgb, pointer);

Bitmap bmp = new Bitmap(width/3, height/3, stride, 
      PixelFormat.Format24bppRgb, pointer);

我没有崩溃,得到3个图像覆盖了总面积的1/3。我应该得到的是一张覆盖整个1280 X 960区域的图像。

如何在C#中将原始RGB数据数组转换为位图

Format24bppRgb表示一个像素占用24位(3字节),而不是您在样本中预先分配的1位。

更改为每个像素的位分配的字节数(以字节为单位,如果使用不同大小,请不要忘记填充):

frame = new byte[1280 * 960 * 3]; // 24bpp = 3 bytes

你试过宽度-1和高度-1吗?