2012-07-04 42 views
1

我正在嘗試在asp.net中調整圖像大小。實際大小調整代碼之外,我想知道爲什麼會出現重載位圖的保存之間如此大的差異爲什麼bitmap.Save與ImageFormat和ImageCodecInfo的差別在.NET中如此之大?

方法1

ImageCodecInfo jpgEncoder = 
     ImageCodecInfo.GetImageDecoders() 
     .First(c => c.FormatID == ImageFormat.Jpeg.Guid); 
    Encoder encoder = Encoder.Quality; 
    EncoderParameters encoderParameters = new EncoderParameters(1); 
    encoderParameters.Param[0] = new EncoderParameter(encoder, (long)quality); 
bitmap.Save(_current_context.Response.OutputStream,jpgEncoder,encoderParameters) 

方法2

bitmap.Save(_current_context.Response.OutputStream,ImageFormat.Jpeg) 

所以方法1,在100質量,輸出這個特定的jpeg圖像大約250kb。在90質量下,它下降到大約100kb

然而,方法2將圖像下降到大約60kb,這是一個巨大的差異,也沒有可見的差異。

我似乎無法找到任何地方爲什麼差異如此之大,MSDN有關這兩個重載零細節。

任何洞察力是讚賞。謝謝

回答

0

看看ImageCodeInfo /編碼器對象,似乎沒有提供一種方式來提取設置。我會假設默認情況下它將保存的質量設置爲100。

沒有更多關注Windows Imaging的東西,這真的很難說。

您可以嘗試使用默認保存(Method2)和方法1(使用100)來執行您的代碼並查看它們是否相同。這很可能是這樣。

http://msdn.microsoft.com/en-us/library/system.drawing.imaging.encoder.quality.aspx#Y800

+0

可惜不是,方法1在100質量和方法2是截然不同的,這就是爲什麼我問 – andryuha

+0

我想我的觀點是試驗不同的值,看看他們結婚了。從我的觀察,我無法找到如何提取正在使用的默認值,而無需深入研究.NET正在使用的這種東西的Windows映像。 –

相關問題