C# SnapsToDevicePixels不';你不能处理图像吗?
我在WPF中遇到位图图像问题。当图像容器从非整数的位置开始时,图像似乎不符合C# SnapsToDevicePixels不';你不能处理图像吗?,c#,wpf,bitmap,C#,Wpf,Bitmap,我在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"
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,带有细垂直线:。(我的系统分辨率为96 DPI,Windows XP,.NET 4)
当我运行程序时,第一个图像是清晰的,而第二个图像是模糊的:
不同的来源,包括这里关于stackoverflow的一些,建议了不同的解决方法。(例如,这些帖子:,和。)我尝试了一些变通方法,它们似乎很有效。在主窗口上使用UseLayoutRounding=“true”
可以使两个图像都清晰。在图像上使用RenderOptions.BitmapScalingMode=“NearestNeighbork”
也会使图像变得清晰
问题是,为什么没有解决办法,SnapsToDevicePixels=“True”
就不能工作?这是WPF中的错误还是我用错了它?由此:
SnapsToDevicePixels
WPF预计,在某些情况下,人们希望保持一致
用像素网格代替亚像素精度。你可以设置
任何UIElement上的SnapsToDevicePixels属性。这将导致我们
尝试渲染到像素网格,但有相当多的情况
这不起作用-包括图像。我们将寻求改进
这是将来的事
因此,这只是SnapsToDevicePixels功能的一个已知限制。鉴于模糊图像是
SnapsToDevicePixels
的基本用例之一,我感到遗憾的是,在中没有提到这个错误。@Vlad-是的,不确定为什么它对图像不起作用。除此之外,如果它试图与设备像素对齐,则可能需要在其边界之外进行渲染。看起来从一开始就应该包括UseLayoutRounding。