转换为字节数组时图像数据丢失

时间:2016-07-05 22:57:04

标签: c# .net image bitmap memorystream

我尝试使用MemoryStream将图像转换为字节数组,但是当我恢复图像时,图像看起来会有所不同。

我制作了一个简单的Form应用来展示问题。我在这个例子中使用谷歌浏览器图标:

var process = Process.GetProcessById(3876); // found pid manually
var image = Icon.ExtractAssociatedIcon(process.MainModule.FileName).ToBitmap();
pictureBox1.Image = image;

byte[] imageBytes;
using (var ms = new MemoryStream())
{
    image.Save(ms, ImageFormat.Bmp);
    imageBytes = ms.ToArray();
}

using (var ms = new MemoryStream(imageBytes))
{
    pictureBox2.Image = (Bitmap) Image.FromStream(ms);
}

结果:

image before and image after

知道我在这里失踪的是什么吗?

更新我能够使用以下代码获取正确的字节:

var converter = new ImageConverter();
var imageBytes = (byte[]) converter.ConvertTo(image, typeof(byte[]));

仍然想知道内存流的最新情况。

1 个答案:

答案 0 :(得分:3)

Icons are complicated。当它们包含透明部分时,转换为BMP或JPG almost always seems to end badly。您也不需要 realm.write(() => { let exercise = realm.create('Exercise', { id: 209, name: 'Dumbbell Overhead Press', category: 'Military Press', bodyPart: 'Shoulder' }, true); exercise.levels.push({ level: 3, equipments: 'DB' }); }); 它几乎完成了没有BMP转换的代码所做的事情:

ImageConverter

ImageConverter Reference Source