图像不是逐像素显示的

时间:2012-11-08 14:17:38

标签: c# wpf image xaml

我很困惑。

我创建了一个PNG图像,它在我的应用程序显示中是一个分隔符,图像像这样高3像素:

enter image description here

然而,当我在C#WPF窗口上显示并运行它时,分隔符显示为大约4个像素,颜色关闭。

代码:

<StackPanel Height="3">
    <StackPanel.Background>
        <ImageBrush ImageSource="Assets/divider.png" Stretch="None"
            AlignmentX="Left" AlignmentY="Top" Viewport="0,0,20,3" 
            ViewportUnits="Absolute" TileMode="FlipX" />
    </StackPanel.Background>
</StackPanel>

输出和缩放:

enter image description here

我认为图像是“拉伸”的(尽管Stretch="None")或者有一些优化图像的机制,所以我取消了图像并用3个矩形写了相同颜色和1像素高度各自像这样:

<StackPanel Height="3" Orientation="Vertical">
    <Rectangle Fill="#484848" Height="1" />
    <Rectangle Fill="#222" Height="1" />
    <Rectangle Fill="#484848" Height="1" />
</StackPanel>

然而结果是相似的:4个像素和颜色流失(不是指定的确切颜色):

enter image description here

除了像素关闭外,颜色也会关闭。我的颜色应该是#484848#222222#484848。当在WPF窗口上显示时,阴影会稍微偏离(太多灰色阴影!)

我需要分隔符来填充窗口,因为窗口调整大小。我是一个完美主义者,我希望3像素高度分离器像素完美。解决这个问题的任何解决方案?

1 个答案:

答案 0 :(得分:0)

感谢@Brian和@Sisyphe,我能够正确显示这些行。然而,这仍然是通过Rectangle显示器完成的解决方案,我认为有更好的解决方案。

这是我目前的解决方案:

<StackPanel HorizontalAlignment="Stretch" Height="3">
    <Rectangle Fill="#484848" Height="1" RenderOptions.EdgeMode="Aliased" />
    <Rectangle Fill="#222222" Height="1" RenderOptions.EdgeMode="Aliased" />
    <Rectangle Fill="#484848" Height="1" RenderOptions.EdgeMode="Aliased" />
</StackPanel>