3

我只是在加载 JPEG 图像并保存它,而无需对其进行任何操作。但图像质量明显下降。

这是代码:

Bitmap imgOutput = new Bitmap(@"D:\image.jpg");
Graphics outputGraphics = Graphics.FromImage(imgOutput);      

EncoderParameters myEncoderParameters = new EncoderParameters(3);
myEncoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
myEncoderParameters.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.ScanMethod, (int)EncoderValue.ScanMethodInterlaced);
myEncoderParameters.Param[2] = new EncoderParameter(System.Drawing.Imaging.Encoder.RenderMethod, (int)EncoderValue.RenderProgressive);

ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo ici = null;
foreach (ImageCodecInfo codec in codecs)
{
    if (codec.MimeType == "image/jpeg")
        ici = codec;
}

imgOutput.Save(@"D:\result.jpg", ici, myEncoderParameters);

我得到了什么:http: //i.imgur.com/5bG1tPM.jpg放大:http: //i.imgur.com/vdx8sL5.jpg

是否有其他图像质量设置?

4

1 回答 1

4

JPEG 是一种有损格式,每次保存都会造成损失。它在压缩尖锐边缘方面也特别糟糕。根据这篇 MSDN 文章,您正确设置了图像质量。如果您想尝试优化图像质量,您可以使用其他设置,因为我不知道您是如何提出 ScanMethod 和 RenderMethod 的。但是,我认为最好的方法是使用无损格式(PNG、TIFF 等)。

更新

这似乎是由于 GDI+ JPEG 编码器不好造成的。更多关于它的 MSDN 论坛。结论是 - 使用第三方图像库,那里有很多免费的。

于 2013-05-04T11:19:25.517 回答