我有一个字节数组(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正确输出到我的目录?我目前正在获得以下损坏的图像。
答案 0 :(得分:2)
如果您可以将imgBuffer
字节数组保存到磁盘并在图像查看器中将其作为JPEG读取,那么它不是图像的原始RGB值。
您可以从流中加载Bitmap
并使用imgBuffer
中的数据作为来源,然后您将获得一个可以使用的Bitmap
对象。
答案 1 :(得分:0)
我认为这里的问题是Bitmap
代码假定数据是位图格式。 Save方法首先将其转换为jpg,然后将其保存。在这种情况下,它已经是jpg格式,因此将jpg转换为jpg正在破坏图像。在File.WriteAllBytes
方法中,它只是直接保存,因此没有损坏