2013-05-04 96 views
3

我只是加載JPEG圖像並將其保存,無需任何操作。但圖像質量明顯降低。c#:在以100%質量保存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

JPEG是一種有損格式,每次保存都會導致丟失。壓縮銳利邊緣也特別不利。根據this MSDN article,您正確設置圖像質量。如果您想嘗試優化圖像質量,可以使用其他設置進行播放,因爲我不知道如何使用ScanMethod和RenderMethod。然而,我認爲最好的方式是使用無損格式(PNG,TIFF等)。

更新

看來,這是由於糟糕的GDI + JPEG編碼器。更多關於the MSDN forums。結論是 - 使用第三方圖像庫,那裏有很多免費的圖像庫。

+0

是的,PNG節省很多。但儘管JPEG是有損格式,但當我在Photoshop中打開圖像並將其另存爲JPEG時,結果圖像完美無瑕(甚至文件較小)。這意味着JPEG格式允許保存圖像更加正確。我想知道如何) – user1032559 2013-05-04 11:43:10

+0

@ user1032559它似乎是GDI +,這是不好的。查看更新和鏈接。 – 2013-05-04 14:06:38

+0

我查看了這個工具的源代碼 - http://www.codeproject.com/Articles/9727/Image-Processing-Lab-in-C它以非標準方法保存圖像,效果很好。唯一的區別是它們不使用EncoderParameters。但是,當我保存沒有這些參數的圖像時,JPEG的總體質量非常低。 – user1032559 2013-05-06 08:03:41