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像素.
大多数将不可见.所以他们一定不能被吸引.基本上只绘制画布中可见的那些.无论如何,在重新调整大小或滚动时重新绘制,然后执行相同操作 - 仅绘制可见的内容.
虚拟化是这里绩效的关键.尽早将事物从绘图循环中取出.根据定义不可见的东西根本不需要绘制.
下一个选择是不使用画布.尝试一下位图.在单独的线程上准备它,然后立即绘制它.
| 归档时间: |
|
| 查看次数: |
5131 次 |
| 最近记录: |