【问题标题】:High quality image scaling高质量图像缩放
【发布时间】:2012-10-18 07:45:47
【问题描述】:

我已经阅读了这个问题,High Quality Image Scaling Library,但它只与 GDI+ 有关。

当我在我的应用中缩小Image 时,它变得非常锯齿。

我在 Image 类上找不到任何可以提高缩小质量的属性。

我该怎么做?

编辑:

我现在已经使用了这个代码:

BitmapImage img = new BitmapImage();
img.UriSource = new Uri(Graphic, UriKind.Relative);
return img;

其中Graphic 是一个包含图像路径的string,但我得到了这个异常:

Weather.DLL 中出现“System.ArgumentException”类型的异常,但未在用户代码中处理

附加信息:给定的 System.Uri 无法转换为 Windows.Foundation.Uri。详情请见http://go.microsoft.com/fwlink/?LinkID=215849

据我所知,Windows.Foundation.Uri 未在 .net 框架中使用。

那么为什么会出现这个错误呢?

【问题讨论】:

  • 你说的是哪个 Image 类?
  • 你缩小图像的因素是什么?
  • 你能发布你的代码吗?
  • @PaoloMoretti 我的代码基本上只是一个设置较小宽度和高度的<Image> 标签。
  • 我认为你不能在 XAML 中做到这一点。 WPF 有一个附加属性 RenderOptions.BitmapScalingMode 来更改插值模式,但这在 WinRT 中不可用。您可能必须在代码隐藏中创建一个新的缩放图像。 This post 可能会对您有所帮助。

标签: c# xaml windows-8 microsoft-metro windows-runtime


【解决方案1】:

在 XAML 中:

    <Image Width="250" Height="250" Stretch="UniformToFill">
        <Image.Source>
           <BitmapImage UriSource="{Binding ImagePath}" DecodePixelHeight="250"/>
        </Image.Source>
    </Image>

在 C# 中:

    BitmapImage bitmapImage = BitmapImage("URL HERE");
    bitmapImage.DecodePixelHeight = 250;

仅设置 DecodePixelHeight 或 DecodePixelWidth。

http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.decodepixelheight.aspx

【讨论】:

    【解决方案2】:

    我最终创建了第二个较小的图像,并在我需要缩小它的所有地方使用它。

    【讨论】:

      【解决方案3】:

      通过使用对图像缩放的内置支持,您也许可以完全避免遇到的问题:

      http://msdn.microsoft.com/en-us/library/windows/apps/hh465362.aspx

      您可以包含不同分辨率的图像的多个版本(文件名相同但具有已知后缀或位于已知文件夹中),系统将根据用户设备的 DPI 自动加载适当的版本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-19
        • 2010-09-26
        • 1970-01-01
        • 2021-11-06
        • 1970-01-01
        • 2015-04-11
        • 2011-08-28
        相关资源
        最近更新 更多