如何停止反别名模式以获得1px线

时间:2017-12-25 04:14:20

标签: .net uwp stroke

基本上,我想画一些1px笔画宽度的行。 但是,即使我将笔画宽度的值设置为1,行也覆盖了2个像素。 所以我用Google搜索并了解了别名和反别名渲染。 现在,解决方案我找到了完全匹配问题here,这个问题的答案来自这两行:

myLine.SnapsToDevicePixels = true;
myLine.SetValue(RenderOptions.EdgeModeProperty, EdgeMode.Aliased);

但这些方法很可能已过时,因为它显示错误 Line类Windows.UI.Xaml.Shapes没有这些属性或方法。 我也试过这个:

myLine.UseLayoutRounding = false;

但那并没有奏效。这里有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

如果您尝试绘制具有X和Y坐标的线,则坐标定义线的中心。

所以我假设您将Line定义为:

StrokeThickness

这导致线的中心在两个像素之间(从顶部到像素9和10)。因此渲染总是发生在相邻的像素中(因此,至少在理论上,导致每个奇数StrokeThickness / 2的模糊/更宽的线)。

要解决此问题,请尝试将myLine.StrokeThickness = 1; myLine.Y1 = 10.5; myLine.Y2 = 10.5; myLine.X1 = 0; myLine.X2 = 50; 添加到Y坐标。因此,在本例中,您可以通过设置以下值来解决它:

<button>Toggle Me</button>
<h1>My First Line</h1>
<h2>The Second Line</h2>
<p>This is a paragraph.</p>
<span>This is a span.</span>

如果您尝试绘制垂直线,则应用于X轴坐标。