从字节转换后的图像质量降低

woo*_*122 2 c# memorystream image

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

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

并将字节 [] 转换回图像,

MemoryStream mstream = new MemoryStream(buffer);
Image newImage = Image.FromStream(mstream);
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*isF 5

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

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

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

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

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