gpt4 book ai didi

c# - 需要一些东西在 WPF 中快速绘制许多图像

转载 作者:行者123 更新时间:2023-12-04 20:22:23 25 4
gpt4 key购买 nike

我正在研究 .NET 3.5 中的元胞自动机生成器。我决定使用 WPF,因为我想在 WPF 中学习一些新的东西。

我画一维自动机,如规则 30 和二维自动机,如 Life .

我需要一些东西来快速绘制许多图像。

例如,网格尺寸为 64 x 64,单元格大小为 12 像素。所以我一步绘制了 64*64 = 4096 张图像。一步之间的间隔约为100 ms。

我将我的应用程序重写为 WinForms,一切正常。但是在 WPF 中很慢,我不知道为什么。

我在 WPF 中绘制的示例:

我有一个派生自 Image 的类。在这个类中,我绘制了一个位图并在 Source 属性中使用它。

        public void DrawAll()
{

DrawingGroup dg = new DrawingGroup();


for (byte i = 0; i < this.DimensionX; ++i)
{

for (byte j = 0; j < this.DimensionY; ++j)
{

Piece p = this.Mesh[i][j];

Rect rect = new Rect(j * this.CellSize + (j + 1), i * this.CellSize + (i + 1),
this.CellSize, this.CellSize);

ImageDrawing id = new ImageDrawing();
id.Rect = rect;

if (p == null)
id.ImageSource = this._undefinedPiece.Image.Source;
else
id.ImageSource = p.Image.Source;


dg.Children.Add(id);


}

}

DrawingImage di = new DrawingImage(dg);

this.Source = di;

}

在 WPF 中绘制的第二个示例:

我从 Canvas 派生类并覆盖 OnRender 函数。基于这篇文章: http://sachabarber.net/?p=675
protected override void OnRender(DrawingContext dc)
{
base.OnRender(dc);

for (byte i = 0; i < this.DimensionX; ++i)
{

for (byte j = 0; j < this.DimensionY; ++j)
{


Rect rect = new Rect(j * this.CellSize + (j + 1), i * this.CellSize + (i + 1),
this.CellSize, this.CellSize);



BitmapImage bi;

int counter = i + j + DateTime.Now.Millisecond;

if (counter % 3 == 0)
bi = this.bundefined;
else if (counter % 3 == 1)
bi = this.bwhite;
else
bi = this.bred;


dc.DrawImage(bi, rect);

++counter;

}

}
}

感谢所有回复

最佳答案

this 中所写文章中,在 wpf 中绘制 2D 的最快方法是 StreamGeomerty。
我相信您能够适应您的模式生成逻辑以满足本类(class)的需要。

关于c# - 需要一些东西在 WPF 中快速绘制许多图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5020779/

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