如何停止抗锯齿模式以获得 1px 线

How to stop anti alias mode to get a 1px line

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

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

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

myLine.UseLayoutRounding = false;

但这没有用。有什么帮助吗?

如果您尝试使用 X 和 Y 坐标绘制一条线,则坐标定义线的中心。

所以我假设你定义的线是这样的:

myLine.StrokeThickness = 1;
myLine.Y1 = 10;
myLine.Y2 = 10;
myLine.X1 = 0;
myLine.X2 = 50;

这导致线的中心位于两个像素(从顶部开始的像素 9 和 10)之间。所以渲染总是发生在相邻的像素中(因此,至少在理论上,每个奇数 StrokeThickness 都会导致一条 blurry/wider 线)。

要解决此问题,请尝试将 StrokeThickness / 2 添加到您的 Y 坐标。因此,在此示例中,您将通过设置以下值来解决它:

myLine.StrokeThickness = 1;
myLine.Y1 = 10.5;
myLine.Y2 = 10.5;
myLine.X1 = 0;
myLine.X2 = 50;

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