为什么bitmap.Save与ImageFormat和ImageCodecInfo之间的差异在.net中如此之大?

时间:2012-07-04 22:23:20

标签: asp.net .net image-processing bitmap jpeg

我正在尝试使用asp.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)

因此,100质量的方法1输出约250kb的特定jpeg图像。在90质量时,它降至约100kb

方法2然而,将图像降低到大约60kb,这是一个巨大的差异,也没有明显的差异。

我似乎无法找到为什么差异如此之大,MSDN对这两个重载没有任何细节。

任何见解都表示赞赏。感谢

1 个答案:

答案 0 :(得分:0)

查看ImageCodeInfo / Encoder对象,这些对象似乎没有提供解压缩设置的方法。我认为默认情况下它会在保存时将质量设置为100。

如果不仔细研究Windows Imaging的内容,很难说。

您可以尝试使用默认保存(Method2)和使用100的方法1来查看代码,看看它们是否相同。这很有可能。

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