我在WPF中遇到了位图图像的问题。当图像容器从非整数位置开始时,图像似乎不会遵守SnapsToDevicePixels
的值。
示例代码:
<Window x:Class="BlurryImage.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="110" Width="200">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Button SnapsToDevicePixels="True">
<Image SnapsToDevicePixels="True" Source="i16.png" Stretch="None"/>
</Button>
<Button SnapsToDevicePixels="True" Margin="10.333333,0,0,0">
<Image SnapsToDevicePixels="True" Source="i16.png" Stretch="None"/>
</Button>
</StackPanel>
</Window>
(请注意左边距的值:10.333333。)
这里的图像 i16.png 是一个简单的 16x16 的位图,分辨率为 96 DPI,具有细长的垂直线条:
![image here](https://istack.dev59.com/ihRbB.webp)
当我运行程序时,第一张图片很清晰,而第二张模糊不清:
![blurry image screenshot](https://istack.dev59.com/IepMG.webp)
UseLayoutRounding="true"
可以使两个图像都变得清晰。在图像上使用 RenderOptions.BitmapScalingMode="NearestNeighbor"
也可以使其变得清晰。问题是,为什么不使用这些解决方法,
SnapsToDevicePixels="True"
就无法正常工作?这是 WPF 的一个 bug 还是我使用方式有误?