2012-10-09 11 views
3

以下问题。我只是试图用C#绘制小东西。我想用Canvas做到这一点。但即使没有画布,线条也显示模糊。在简单演示项目中已经失败的最简单的事情是以下代码:带和不带帆布的模糊线条。没有办法实现任何像素捕捉方式?

<UserControl x:Class="Drawing.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="400"> 

    <Grid x:Name="LayoutRoot" Background="White"> 
     <Line Y1="1" Y2="300" StrokeThickness="1" 
       Stroke="Black" Margin="10 0 0 0"/> 
    </Grid> 
</UserControl> 

这行只是显示模糊。我已经尝试了这么多,但我无法弄清楚如何实现清晰和一个像素宽的线条。

我尝试以下操作:

  • UseLayoutRounding="True"
  • 我试过像素鲷类 - 提供here - 不工作对我来说,无论是。这里的Xavier Poinasthread)的答案,他有明显的相同的问题,也没有用这个自定义像素捕捉器:“坐标我似乎明白,这个类通过捕捉项目的边界来圆化像素,但坐标我使用的已经是整数,并且在路径的情况下,捕捉边界可能并不意味着内容也落在圆像素上。“

这很好,如果找到了解决方案,它允许我捕捉由Canvas保存的行。

原因是:由于技术原因,我们需要一个无边框OOB应用程序,它实现了自定义边框(调整大小)以及包含最小化,最大化和关闭项目的自定义应用程序栏。我只是想通过手绘这些图标,通过线等:

BarIcons

是否有可能更简单的方法?我只是不想使用图像资源。谢谢!

任何帮助将大大赞赏。

+0

我不知道了很多关于Silverlight的,但我在想,你不上的像素boundry绘制准确。当我在WPF中处理这种事情时,我得到了很多。对我来说,我是在画布上的整数位置绘制的...但是我的画布没有完全对准像素边界(它正在居中,并且像素数量使得它在像素之间对齐。) – Beska

回答

5

坐标是像素之间的点。

您看到的模糊线条是渲染引擎试图在两个像素之间平均分散绘图的结果,1px线将覆盖这种情况。

这允许引擎从0,0到maxX,maxY工作并仍然使用部分像素渲染。

将0.5加到你的坐标上,它会显得很尖锐。

,或者上传到0.5,0.5

+0

我有昨天我和其中一位同事聊了两个多小时,我们发现了这个解决方案。不过谢谢你。 :) –

相关问题