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

时间:2013-08-24 01:38:13

标签: c# image-processing bitmap camera

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

这是相应的代码:

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);

我不会崩溃并获得覆盖总面积1/3的3张图像。我应该得到的是覆盖整个1280 X 960区域空间的单个图像。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

您是否尝试过width-1和height-1?