gpt4 book ai didi

c# - 强制 drawingContext 线捕捉到像素边界

转载 作者:太空狗 更新时间:2023-10-29 20:08:12 24 4
gpt4 key购买 nike

我在 WPF 应用程序中绘制图形,但使用 drawingContext.DrawLine(...) 绘制的线被绘制到子像素边界。

我可以通过创建 Line 对象让它们看起来不错,但我不想在每次视觉对象失效时都创建数以万计的对象。

我怎样才能强制它们适应像素?

最佳答案

您可以将线条绘制到具有 protected VisualEdgeMode 的派生 DrawingVisual 中属性设置为 EdgeMode.Aliased:

public class MyDrawingVisual : DrawingVisual
{
public MyDrawingVisual()
{
VisualEdgeMode = EdgeMode.Aliased;
}
}

public class DrawingComponent : FrameworkElement
{
private DrawingVisual visual = new MyDrawingVisual();

public DrawingComponent()
{
AddVisualChild(visual);

using (DrawingContext dc = visual.RenderOpen())
{
dc.DrawLine(new Pen(Brushes.Black, 1d), new Point(100, 100), new Point(100, 200));
dc.DrawLine(new Pen(Brushes.Black, 1d), new Point(105.5, 100), new Point(105.5, 200));
dc.DrawLine(new Pen(Brushes.Black, 1d), new Point(112, 100), new Point(112, 200));
}
}

protected override int VisualChildrenCount
{
get { return 1; }
}

protected override Visual GetVisualChild(int index)
{
return visual;
}
}

很奇怪,但是在非派生的 DrawingVisual 上调用 RenderOptions.SetEdgeMode(visual, EdgeMode.Aliased) 并没有完成这项工作。

关于c# - 强制 drawingContext 线捕捉到像素边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10256125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com