【问题标题】:Bitmap smoothing in UWPUWP 中的位图平滑
【发布时间】:2016-10-19 21:26:18
【问题描述】:

我想弄清楚如何在不损失 UWP 质量的情况下调整图像大小。我知道在 WPF 中有一个选项可以使用以下方法平滑图像:RenderOptions.BitmapScalingMode="HighQuality" 但我似乎在 UWP 中找不到等效项。

图片如下:

它应该是什么样子:

如果您仔细观察,您会发现图片像素化严重。如何在 UWP 中实现这一点?

我正在通过 XAML(圆形裁剪)调整它的大小:

<Ellipse x:Name="personImageContainer" Width="50" Height="50">
    <Ellipse.Fill>
        <ImageBrush x:Name="personImage" ImageSource="/Assets/BlankContact.png" Stretch="Uniform" />
    </Ellipse.Fill>
</Ellipse>

只需像这样设置图像:

personImage.ImageSource = new BitmapImage(new Uri("http://lorempixel.com/500/500/"));

我似乎在 ImageBrushBitmapImage 中都找不到任何其他设置。

【问题讨论】:

  • 在调整图像大小时不要使用点采样过滤器。改为使用双线性过滤,或者如果这还不够,请使用其他过滤器。此外,如果您需要代码方面的帮助,发布该代码通常会有所帮助。调整大小的代码在哪里?
  • 我没有使用任何类型的调整大小过滤方法,我正在寻找是否有办法在 XAML 中做到这一点。
  • 原图尺寸是多少?
  • 我的图片大小不一。

标签: c# xaml uwp


【解决方案1】:

作为一种优化,框架通常会以较小的分辨率解码图像以匹配屏幕上显示的目标Image 元素的大小,但这只有在框架能够立即确定目标的大小时才会发生Image 将。如果框架无法推断出这一点,那么它将以全分辨率加载图像并由 GPU 缩小,而不是可能具有简陋的线性插值,这使得缩小时图像看起来很粗糙。

我认为这就是您的示例中发生的情况,因为 ImageBrush 不知道它所应用的 Ellipse 的大小。 (这是一种显示图像的自定义方式。)

由于您提前知道Ellipse 的大小,您可以明确告诉框架以您指定的分辨率解码图像。

<!-- Bad: image will be full resolution -->
<Ellipse Width="50" Height="50">
    <Ellipse.Fill>
        <ImageBrush Stretch="UniformToFill" ImageSource="Assets/Cat.jpg"/>
    </Ellipse.Fill>
</Ellipse>

<!-- Better: image is scaled down nicely and uses less memory -->
<Ellipse Width="50" Height="50">
    <Ellipse.Fill>
        <ImageBrush Stretch="UniformToFill">
            <ImageBrush.ImageSource>
                <BitmapImage UriSource="Assets/Cat.jpg" DecodePixelType="Logical" DecodePixelWidth="50"/>
            </ImageBrush.ImageSource>
        </ImageBrush>
    </Ellipse.Fill>
</Ellipse>

有关此here 的更多信息。

【讨论】:

  • 虽然这提高了图像质量,但它仍然不允许您选择插值模式。您必须在运行时设置ImageSource,使用BitmapEncoder 来生成调整大小的图像。这允许您专门设置BitmapTransform.InterpolationMode
  • 谢谢!现在的照片看起来好多了!:)
  • 你知道如何用 BitmapIcon 元素完成类似的事情吗?
猜你喜欢
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
  • 1970-01-01
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 2013-01-23
相关资源
最近更新 更多