1

需要按像素数组绘制数据(大)。我怎样才能做到这一点?

我在上面尝试了 Canvas 和 Rectangle - 计算机上吊了自己...尝试了以下选项(DrawingContext) - 计算机仍然上吊了自己,但少了一点。

请推荐计算机负载最小的选项。整数宽度 = 800;- 数组的大小(大!!!) int size = 1; - 希望能够使片段不仅仅是一个像素,而是几个像素

protected override void OnRender(System.Windows.Media.DrawingContext drawingContext)
        {
            Random rnd = new Random();
            int width = 800;
            int size = 1;
            CellType[,] types = new CellType[width, width];
            for (int i = 0; i < width; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    int r = rnd.Next(0, 100);
                    if (r >= 70) types[j,i] = CellType.IsOccupied;
                    else types[j, i] = CellType.IsEmpty;
                }
            }


            for (int i = 0; i < width; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    Brush brush = Brushes.Black;

                    switch (types[j, i])
                    {
                        case CellType.IsEmpty: brush = Brushes.Green;
                            break;
                        case CellType.IsOccupied: brush = Brushes.Black;
                            break;
                    }

                    drawingContext.DrawRectangle(brush,
                    new Pen(brush, 1),
                    new Rect(j * size, i * size, size, size));
                }
            }

            base.OnRender(drawingContext);
        }
4

1 回答 1

1

它会冻结多长时间?几年前,我在 Silverlight 中做了类似的事情。这有点慢,但仍然可以接受。尝试使用带有 SetPixel 或 FillRectangle 方法的 WriteableBitmap,但请记住,在循环中逐像素绘制总是需要一些时间。

忘了提到 SetPixel 和 FillRectangle 可能需要 WriteableBitmapEx,可在此处获得: http ://writeablebitmapex.codeplex.com/

于 2013-04-09T09:27:07.983 回答