8

WPFアプリケーションでグラフを描画していますが、を使用しdrawingContext.DrawLine(...)て描画された線はサブピクセル境界に描画されます。

オブジェクトを作成することで見栄えを良くすることはできLineますが、ビジュアルが無効になるたびに何万ものオブジェクトを作成したくありません。

どうすればそれらをピクセルに合わせるように強制できますか?

4

2 に答える 2

12

保護された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;
    }
}

奇妙なことに、RenderOptions.SetEdgeMode(visual, EdgeMode.Aliased)派生していないDrawingVisualを呼び出しても機能しません。

于 2012-04-21T09:04:39.723 に答える
2

それは素晴らしいことです。

別のオプション(この場合はより複雑)は、DrawingGroupでRenderOptions.SetEdgeModeを使用することです。

https://stackoverflow.com/a/16984921/2463642

于 2013-06-07T15:29:13.100 に答える