WPFアプリケーションでグラフを描画していますが、を使用しdrawingContext.DrawLine(...)
て描画された線はサブピクセル境界に描画されます。
オブジェクトを作成することで見栄えを良くすることはできLine
ますが、ビジュアルが無効になるたびに何万ものオブジェクトを作成したくありません。
どうすればそれらをピクセルに合わせるように強制できますか?
保護された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を呼び出しても機能しません。
それは素晴らしいことです。
別のオプション(この場合はより複雑)は、DrawingGroupでRenderOptions.SetEdgeModeを使用することです。