【问题标题】:WPF: Selecting a jpg, resizing it and then saving it? Best option?WPF:选择 jpg,调整大小然后保存?最佳选择?
【发布时间】:2009-11-06 10:54:05
【问题描述】:

我想知道拍摄所选图像、调整大小并保存它的最佳方法是什么。据我所知,WPF 在调整图像大小时会破坏图像质量。这是真的吗,如果是的话,我应该用什么方法来尝试这个任务?

谢谢,科汉。

【问题讨论】:

    标签: c# wpf image


    【解决方案1】:

    WPF 旨在能够实时调整图像大小以进行显示(使用显卡加速),因此它偏向于速度而不是质量。

    如果您想获得不错的质量,您应该使用System.Drawing.Bitmap 来调整大小:

    System.Drawing.Bitmap resizedImage;
    
    using(System.Drawing.Image originalImage = System.Drawing.Image.FromFile(filePath))
        resizedImage = new System.Drawing.Bitmap(originalImage, newSize);
    
    // Save resized picture
    resizedImage.Save(resizedFilePath, System.Drawing.Imaging.ImageFormat.Jpeg);
    resizedImage.Dispose();
    

    质量仍然不会很好 - JPEG 是一种有损图像格式,加载和保存以及Bitmap 类的粗略缩放都会丢失保真度。如果质量必须尽可能高,那么您应该考虑使用像 DevIL 这样的图像库,它可以更好地生成平滑调整大小的图像。

    【讨论】:

    • 谢谢,我不需要完美的质量,所以你的代码对我来说是一个完美的基础。现在启动并运行。非常感谢。
    • 这段代码有点简单,可能会渲染太大且质量太差的 jpeg。查看stackoverflow.com/questions/1745446/… 以获得更好的方法。
    【解决方案2】:

    您不必恢复到 GDI+ 来缩放位图。 WPF 本身具有您需要的所有 API。质量一样:http://social.msdn.microsoft.com/forums/en-US/wpf/thread/580fca03-d15b-48b2-9fb3-2e6fec8a2c68/

    图像处理在 WPF 中非常强大,而且比 GDI+ 更快。

    【讨论】:

      【解决方案3】:

      如果您只想调整大小然后保存图像,我看不出这与 WPF 有什么关系。您可以只使用 .NET 中的图像处理功能。示例见this link

      【讨论】:

      • 我认为这是一个 WPF 问题,因为这个人在博客中专门指责 WPF 破坏了他的图像:thingsihateaboutmicrosoft.blogspot.com/2009/06/…
      • 不客气。当您想在 WPF 中执行此操作时,他是对的。我认为这在 .NET 4.0 的 WPF 中已修复。不过不确定。
      猜你喜欢
      • 1970-01-01
      • 2012-12-24
      • 2015-02-20
      • 2013-11-15
      • 1970-01-01
      • 2011-07-01
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多