Metro 风格应用程序中的 XAML 图像质量(插值)

2023-11-25

给定以下 Image 对象(它位于 ListView 对象的 DataTemplate 中):

  <Image Source="{Binding ImgSource}" ImageOpened="img_ImageOpened" />

我该如何获得高质量的双三次插值图像? (在屏幕上,该图像的大小小于源 PNG,但默认调整大小似乎是使用质量较差的“最近邻居”插值执行的)。

由于我想单独依赖数据绑定(每当关联数据项的 ImgSource 更改时,图像内容应该更改),因此我尝试设置 ImageOpened 处理程序并将刚刚加载的图像更改为质量更好的图像。

不幸的是,下面的代码似乎不起作用(我只得到空图像):

    async void LoadImage(Image imgControl, string source)
    {
        try
        {
            StorageFile file = await StorageFile.GetFileFromPathAsync(source);

            IRandomAccessStream fileStream = await file.OpenAsync(FileAccessMode.Read);
            BitmapDecoder decoder = await BitmapDecoder.CreateAsync(fileStream);

            InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream();
            BitmapEncoder enc = await BitmapEncoder.CreateForTranscodingAsync(ras, decoder);

            enc.BitmapTransform.InterpolationMode = BitmapInterpolationMode.Cubic;
            enc.BitmapTransform.ScaledHeight = Convert.ToUInt32(imgControl.ActualHeight);
            enc.BitmapTransform.ScaledWidth = Convert.ToUInt32(imgControl.ActualWidth);

            await enc.FlushAsync();

            Windows.UI.Xaml.Media.Imaging.BitmapImage bImg = new Windows.UI.Xaml.Media.Imaging.BitmapImage();
            bImg.SetSource(ras);
            imgControl.Source = bImg;
        }
        catch (Exception e)
        {
            return;
        }
    }

    void img_ImageOpened(object sender, RoutedEventArgs e)
    {
        Image imgControl = (Image)sender;
        LoadImage(imgControl, <path to PNG file>);
    }

我在 WinRT 应用程序中遇到了相同的图像质量问题,并尝试使用 RenderOptions.BitmapScalingMode 但它在 Windows 应用商店的 .NET 中不存在(以及 System.Windows.Media 命名空间)。所以我尝试了你的第一个解决方案并修复了它,使其有效。您距离成功仅一步之遥,只需添加

ras.Seek(0);

允许从头开始读取流。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Metro 风格应用程序中的 XAML 图像质量(插值) 的相关文章

随机推荐

  • 传递给 pytest 夹具的参数可以作为变量传递吗?

    我有两个简单的测试设置 我试图将它们分组到一个夹具中 并希望测试函数将 参数 传递给夹具 这是一个人为的例子 来解释我的问题 假设我有以下 pytest 夹具 pytest fixture scope module params param
  • DataTable.Select日期格式问题

    我正在使用 DataTable Select 在日期范围内过滤数据表 我的条件字符串是 CreatedOn gt 03 11 2009 00 00 00 AND CreatedOn lt 03 11 2009 23 59 00 此过滤器不返
  • UnicodeEncodeError:“ascii”编解码器无法对特殊名称的字符进行编码[重复]

    这个问题在这里已经有答案了 我的 python 版本 2 7 脚本运行良好 可以从本地 html 文件获取一些公司名称 但是当涉及到某些特定的国家 地区名称时 它会给出此错误 UnicodeEncodeError ascii 编解码器无法编
  • rgba 在 IE9 中不工作

    由于某种原因 我无法使用 IE9 在 CSS 中使用 rgba 我已经使用 Chrome 进行了测试 效果很好 不知道出了什么问题 我的 HTML 是
  • Eclipse + Maven:强制执行环境“JavaSE-1.6”而不是固定的JDK

    我使用 Eclipse 作为 IDE 并在其外部使用 Maven 以使所有依赖项保持最新并更新 Eclipse 项目 在 Eclipse 中 我通常指定 JRE 系统库作为任何 Java 项目的执行环境 通常是 JavaSE 1 6 在 p
  • CSS 将文本旋转 n 度,但不旋转边界框?

    我知道 CSStransform rotate属性 以及用于制作有角度的方法div元素 但有一个非常重要的设计元素我无法在任何地方找到解决 如何保持边界框的角度 当我创建有角度的 div 元素时 我使用一个旋转的包装元素n度数 然后是子元素
  • C#:如何使用类型转换器本地化枚举

    阅读后我试图了解如何使用类型转换器这个答案我的其他问题之一 但我不确定我是否完全明白 在我的特定情况下 我想通过根据枚举成员是什么来获取资源字符串 将枚举成员 转换 为本地化字符串 例如 如果我有这个枚举 public enum Sever
  • Mongo复杂排序?

    我知道如何按多个字段对 MongoDB 中的查询进行排序 例如 db coll find sort a 1 b 1 我可以使用用户定义的函数进行排序吗 例如 假设 a 和 b 是整数 则通过 a 和 b 之间的差 a b Thanks UP
  • 如何安装特定版本的 Erlang/OTP?

    我继承了一个带有木偶 流浪者 虚拟框设置的项目 vagrant 的规定正在破坏我的 erlangs 周围的rabbitmq server 错误 gt default err Stage main Rabbitmq Install Packa
  • TensorFlow:兼容性弃用警告

    注意 我的第一个问题在这里 请原谅缺乏细节或信息 如果需要的话 我们非常乐意澄清 我在 Mac 上运行 TensorFlow 1 0 0 并且在使用 learn Estimator 类时不断收到此警告 警告 tensorflow 来自 25
  • 使用React手动刷新react-query onClick

    当我重新获取查询时 当我有 onClick 按钮时 它会进入 正在更新 状态 但我希望重新获取查询并显示 正在加载 状态 我的代码是 https stackblitz com edit react ts jfq8ve file index
  • php chmod() 不更改权限

    我的图片上传脚本有问题 我知道有数百个相同的问题 但我还没有找到适合我的问题 upload dir images postcards chmod upload dir 777 if is writable upload dir echo T
  • 永久代是堆的一部分还是位于 jvm 中的不同空间中

    我看到了很多关于这个问题的评论 有人说是 有人说不是 而且许多答案都是模棱两可的 任何人都可以用更简单的术语描述它所在的位置吗 在一篇文章中 我什至看到有人说它与类内存共享相同的内存位置 其中类由类加载器加载 这是真的吗 原始 可能是错误的
  • Web语音API:在iOS safari上一致获取支持的语音合成声音

    我正在尝试获取 iOS Safari 上支持的语音合成声音列表 根据 API 我应该能够通过调用获取一系列声音 window speechSynthesis getVoices 有时这会给我声音列表 有时则不会 请参阅以下 jsfiddle
  • 为什么我不需要显式借出借用的可变变量?

    我刚刚编写了一个小的 Rust 程序 它计算斐波那契数并记住计算结果 它有效 但我对为什么有点困惑 尤其是递归调用 这也可能不是惯用语 这是程序 use std collections HashMap fn main let n 42 ha
  • 如何初始化具有默认值的类的函数参数

    我正在 Linux gcc 环境中工作 我需要初始化具有默认值的类的函数参数 当我使用类的临时实例执行此操作时 会出现如下错误 函数参数 的默认参数具有类型 类名 例如 void foo std wstring str std wstrin
  • 是什么导致 Vim 中的替换每行只匹配一个元素?

    我已经对我的自己做了很多改变 vimrc最近 我在某个地方引入了一个不受欢迎的功能 当执行搜索标记每行出现多次的替换命令时 只有第一个标记会发生更改 尽管其余标记会因替换而突出显示 我在这里看到了一些关于如何根据具体情况启用此行为的帖子 但
  • 使用 AngularJS、ui.Router 和 yeoman 进行 Livereload Html5 Pushstate

    我想用我的 Angular js 应用程序修复 livereload 我正在使用 yoeman ui router 和 html5 推送状态 a必须做什么 指数对于搜索引擎 您必须将以下内容添加到你的index html The app在您
  • Android ImageView模糊动画

    我正在寻找添加模糊动画ImageView 但有设定的持续时间 例如 我希望图像随着时间的推移而变得模糊 我已经有了模糊图像的方法 但我需要的是让它在 2 秒内从模糊变为不模糊 有人可以帮我吗 编辑 这是我目前模糊图像的方法 public B
  • Metro 风格应用程序中的 XAML 图像质量(插值)

    给定以下 Image 对象 它位于 ListView 对象的 DataTemplate 中