Bitmap.Save与File.WriteAllBytes

时间:2014-03-18 17:11:05

标签: c# file graphics bitmap

我有一个字节数组(imgBuffer),它包含jpeg图像的rgb值。我想将其保存为位图。当我使用System.IO.File.WriteAllBytes("fileImg.jpg", imgBuffer);时,我能够以正确的格式查看目录中的图像。当我尝试将相同的字节数组imgBuffer写入Bitmap对象时,图像被破坏。 (图像格式为24bpp,320x240)

BitmapData data;
Bitmap myBitmap = new Bitmap(320, 240, PixelFormat.Format24bppRgb);
//convert bytes to a bitmap
data = myBitmap .LockBits(new Rectangle(Point.Empty, bitmapResized.Size), ImageLockMode.WriteOnly,
                                  PixelFormat.Format24bppRgb);
Marshal.Copy(imgBuffer, 0, data.Scan0, imgBuffer.Length);
myBitmap .UnlockBits(data);
myBitmap .Save("bitmapImg.jpg");

我必须更改什么才能将bitmapImg正确输出到我的目录?我目前正在获得以下损坏的图像。

enter image description here

2 个答案:

答案 0 :(得分:2)

如果您可以将imgBuffer字节数组保存到磁盘并在图像查看器中将其作为JPEG读取,那么它不是图像的原始RGB值。

您可以从流中加载Bitmap并使用imgBuffer中的数据作为来源,然后您将获得一个可以使用的Bitmap对象。

答案 1 :(得分:0)

我认为这里的问题是Bitmap代码假定数据是位图格式。 Save方法首先将其转换为jpg,然后将其保存。在这种情况下,它已经是jpg格式,因此将jpg转换为jpg正在破坏图像。在File.WriteAllBytes方法中,它只是直接保存,因此没有损坏