gpt4 book ai didi

WPF DrawingBrush 性能

转载 作者:行者123 更新时间:2023-12-02 06:26:15 28 4
gpt4 key购买 nike

我需要在将放置其他控件的 Canvas 背景上绘制网格线。

我尝试创建一个 StreamGeometry,使用它来绘制线条,并将其分配给 DrawingBrush。但是我发现,如果 StreamGeometry 的行数太多,在 DrawingBrush 分配给 Canvas 后程序会变得迟钝。

是否存在“预渲染”网格线并将其分配给 Canvas ?

我尝试了 Freeze() 处理画笔和几何图形,但似乎没有用。我还有哪些其他选择?

这是我的代码:

public void RenderGrid()
{
this.UpdateGrid();
Pen grid_pen = new Pen(Brushes.Blue, 0.1);
StreamGeometry sg = new StreamGeometry();

DrawingBrush b = new DrawingBrush();
GeometryDrawing gd = new GeometryDrawing();
gd.Geometry = sg;
gd.Pen = grid_pen;
b.Drawing = gd;

StreamGeometryContext ctx = sg.Open();
foreach (double d in this.VerticalGrids)
{

ctx.BeginFigure(new Point(d, 0), true, false);
ctx.LineTo(new Point(d, this.RenderSize.Height), true,false);
}
foreach (double d in this.HorizontalGrids)
{

ctx.BeginFigure(new Point(0, d), true, false);
ctx.LineTo(new Point(this.RenderSize.Width, d),true, false);
}
ctx.Close();
sg.Freeze();
gd.Freeze();

b.Freeze();
this.Background = b;
}

最佳答案

我的建议是减少原始计数。您正在让 WPF 花费 CPU 周期和带宽来创建庞大的网格并将其发送到渲染线程和 GPU。

DrawingBrush 是一个 TileBrush .

将网格的单个单元绘制到 DrawingImage 上,并使用 TileMode、Viewbox 和 Viewport 属性平铺网格。

关于WPF DrawingBrush 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/312379/

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