DrawingVisuals
最近、傾向グラフ (特にズームとパン) のパフォーマンスを向上させるために切り替えました。
ここに私が持っているコードがあります:
blocksToBeRendered = (baseItem as AvgCurve).GetStreamGeometryBlocks(ActualWidth, ActualHeight, _minPoint.X, _maxPoint.X, FixTimeStep ? _timeStep : 0, IsMainChart);
Pen stroke = new Pen((baseItem as AvgCurve).LineBrush, 1);
foreach (GeometryGroup group in blocksToBeRendered)
{
if (group.Children.Count != 0)
{
if (!cachedBlocks[baseItem].Any(x => x.Children[0] == group.Children[0]))
{
cachedBlocks[baseItem].Add(group);
ImprovedDrawingVisual vis = new ImprovedDrawingVisual();
BitmapCache cache = new BitmapCache() { SnapsToDevicePixels = true };
vis.CacheMode = cache;
using (DrawingContext context = vis.RenderOpen())
{
RenderOptions.SetEdgeMode(group, EdgeMode.Aliased);
if (group.Children.Count > 0)
{
context.DrawGeometry(null, stroke, group.Children[0]);
}
}
_host.VisualCollection.Add(vis);
}
}
}
これは次のImprovedDrawingVisual
とおりです。
public class ImprovedDrawingVisual: DrawingVisual
{
public ImprovedDrawingVisual()
{
VisualEdgeMode = EdgeMode.Aliased;
VisualBitmapScalingMode = BitmapScalingMode.NearestNeighbor;
}
}
さて、ジオメトリには がありますがTransforms
、これは重要かもしれません。
何が起こるかというと、ビットマップ キャッシュ (1 ピクセルの行) なしでグラフがきれいに描画されますが、ビットマップ キャッシュを有効にすると、グラフの一部がすべてぼやけてしまうことがあります。
これを修正する方法を知っている人はいますか?の設定を変更したり、設定をオフにしたりしてみRenderAtScale
ましDrawingVisual
たEdgeMode
が、解決しません。
編集:ここでは関係ないため、混乱を避けるためにブラシ塗りつぶしジオメトリを省略しました。