gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:47:49 27 4
gpt4 key购买 nike

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

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

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

由于我想单独依赖数据绑定(bind)(每当关联数据项的 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 Store 的 .NET 中不存在(以及 System.Windows.Media 命名空间)。因此,我尝试了您的第一个解决方案并对其进行了修复以使其有效。你离成功只有一小步,只需要添加

ras.Seek(0);

允许从头开始读取流。

关于datatemplate - Metro 风格应用程序中的 XAML 图像质量(插值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11385000/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com