2

提供有关此主题的背景信息。我正在尝试通过使用 memorystream 返回 memorystream.ToArray(); 将图像文件转换为 byte[]; 但是,我注意到转换 inputBitmap -> byte[] -> outputBitmap 后图像质量下降。outputBitmap 的质量低于 inputBitmap。我将图像转换为 byte[] 的代码如下

MemoryStream mstream = new MemoryStream();
myImage.Save(mstream,System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] buffer = mstream.ToArray();

并从 byte[] 转换回图像,

MemoryStream mstream = new MemoryStream(buffer);
Image newImage = Image.FromStream(mstream);

有人可以解释为什么会这样,并希望能指导我纠正这个问题吗?请注意,在我使用 inputBitmap 作为图片框.Image 之前,它的质量看起来很棒。但是在从 byte[] 转换为 outputBitmap 之后,将 outputBitmap 设置为我的图片框.Image 变得有点模糊且质量低下。

4

1 回答 1

5

有几件事对我来说很突出。

  1. 您正在保存为 JPG,而不是像 PNG 这样的无损格式。
  2. 您没有设置用于保存图像的压缩质量。

这意味着您可能正在压缩已经压缩的图像,因此在此过程中会丢失更多信息。

如果可以的话,我会更改为将文件另存为 PNG,否则请确保在保存之前将 JPG 的质量设置为 100%。这将减少对文件的压缩,从而最大限度地减少数据丢失。

如果您仍然看到质量差异,那么我能想到的唯一可以解释的就是屏幕截图和保存的文件之间的分辨率(像素数和/或颜色深度)差异。确保将目标位图大小和颜色深度设置为与源位图相同。

于 2013-01-29T11:30:31.813 回答