将二维数组转换为位图图像。C#

3

我正在进行一个项目,展示使用位图图像逐步显示2D世界生成过程。 数组数据以这种方式存储:

Main.tile[i, j].type = x;

假设x是大于等于0的整数值。

基本上,在程序循环中使用for循环每次更改i和j,并在循环结束时满足某些条件后运行以下语句。因此,可能的顺序如下:

Main.tile[4, 67].type = 1;
Main.tile[4, 68].type = 1;
Main.tile[4, 69].type = 0;

等等。

一旦数组被更改/更新(使用Bitmap.SetPixel),我尝试了几种直接修改位图图像的方法,但这似乎太慢了,对于一个21k,8k像素分辨率的位图来说没有用。

我正在寻找一种在整个循环过程结束时(而不是在每个单独的循环之后,但在步骤之间)消化整个数组并根据i、j将彩色点(取决于数组的值)放置在相应的位置上(就像坐标系一样)。

是否有比SetPixel更快的替代方法,或者有更简单的方法将数组保存为位图/图像文件?


http://msdn.microsoft.com/en-us/library/5ey6h79d.aspx - I4V
1个回答

1
将您的数组转换为一维数组,并在一维数组上应用所有操作,仅当您想要显示图像时才将其改回二维数组。
如何将整个数组从2D更改为1D:
byte[,] imageData = new byte[1, 2]
{ 
    {  1,  2 }
    {  3,  4 }
 };

var mergedData = new byte[ImageData.Length];

// Output { 1, 2, 3, 4 }
Buffer.BlockCopy(imageData, 0, mergedData, 0, imageData.Length);

从2D到1D:
// depending on whether you read from left to right or top to bottom.
index = x + (y * width)
index = y + (x * height)

从一维到二维:
x = index % width
y = index / width or

x = index / height
y = index % height

希望这可以解决你的问题!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接