[imgur deleted image]
左侧的图标是此代码的结果:
<Button Height="23" HorizontalAlignment="Left" Margin="12,276,0,0" Name="button1" VerticalAlignment="Top" Width="75">
<StackPanel Orientation="Horizontal">
<Image Source="Resources/add.png" Stretch="None" />
<TextBlock Margin="5,0,0,0" Text="Add" />
</StackPanel>
</Button>
右边的那个是使用Photoshop放在它旁边的原始图像。看起来通过代码添加的那个被像素拉伸导致一些失真。我该如何预防?
答案 0 :(得分:8)
Stretch="None"
应该做到这一点。如果显示图像的方式不同,可能是由于像素在“边缘”结束。
您可以尝试设置SnapsToDevicePixels
="True"
以避免这种情况。
答案 1 :(得分:4)
尝试使用RenderOptions.BitmapScalingMode="NearestNeighbor"
。
您可能需要阅读以下内容:
答案 2 :(得分:3)
我无法真正看到你的例子中发生了什么,但WPF这类问题的一个非常常见的原因是PNG文件中的DPI值不是96(如果它来自任何东西,通常为72) Mac遗产)。
答案 3 :(得分:2)
添加拉伸=无来自重新加载的图像
<ImageBrush ImageSource="rtgEnhanced.png" AlignmentX="Left" AlignmentY="Bottom" Stretch="None"></ImageBrush>
答案 4 :(得分:1)
实际上,NearestNeighbor将允许引擎在缩放时跳过源图像中的像素。如果有一个线性选项,那可能会更好,因为它意味着从源图像逐个像素地缩放读数。
答案 5 :(得分:1)
我只是通过明确设置宽度或高度来解决这个问题。因此,如果您知道图像是48像素高,请执行以下操作:
<Image Source="myImage.png" Height="48" UseLayoutRounding="True"/>
答案 6 :(得分:1)
PNG图像可以存储称为pHYs块的东西。此块定义了要在其中显示图像的DPI。如果图像的DPI与显示器的DPI不匹配,它将被WPF拉伸,以使其显示为“预期”大小。这通常(至少对我而言)根本不是我想要的并且引起很多挫折。
为了消除“预期”拉伸,一种选择是从PNG中去除pHYs块。
您可以使用TweakPNG之类的工具来检查和删除pHY。
或者,您可以使用正确的DPI编码保存图像,或者根本不保存图像,假设您的图像编辑软件支持该图像。
答案 7 :(得分:0)