在WPF Canvas上实现更快的图形操作

Vin*_*rya 7 c# wpf drawing canvas

我试图在WPF C#中构建一个简单的图形应用程序.目的是绘制10000*10000个矩形,每个矩形的大小为4个像素.

我修改了画布的OnRender方法来绘制矩形.对较少数量的矩形(比如每个4个像素的50*50或100*100矩形)执行绘图,但是当我增加no时它会减慢.矩形

以下是我的代码:

  protected override void OnRender(DrawingContext dc)
    {
        base.OnRender(dc);

        FillCells(dc);

        if (_ShowGrids)
        {
            DrawGrid(dc); // draw grid lines
        }
    }
 void FillCells(DrawingContext dc)
    {

        int cellSize=4;

        for (int i = 0; i < MaxRow; i++)
        {
            for (int j = 0; j < MaxColumn; j++)
            {
                dc.DrawRectangle(GetRectBrush(i,j), GetRectPen(i,j), new Rect(j * cellSize , i * cellSize , cellSize - 1, cellSize - 1));

            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

上面的代码需要一分多钟才能绘制1000*1000个矩形.

有没有什么方法可以让这个过程更快?还有什么我可以用来代替这个吗?

谢谢.

小智 11

目的是绘制10000*10000个矩形,每个矩形的大小为4个像素.

不要画它们.那么简单.这将是40k到40k像素.

大多数将不可见.所以他们一定不能被吸引.基本上只绘制画布中可见的那些.无论如何,在重新调整大小或滚动时重新绘制,然后执行相同操作 - 仅绘制可见的内容.

虚拟化是这里绩效的关键.尽早将事物从绘图循环中取出.根据定义不可见的东西根本不需要绘制.

下一个选择是不使用画布.尝试一下位图.在单独的线程上准备它,然后立即绘制它.