XNA为什么Texture.GetData是一维的?

这是问题,一直在真正杀死我。 在XNA中,当你想使用Texture.GetData将图像转换为彩色数据时,它只能让它成为一维数组而不是二维数组。 这使得更难处理。 有这样的具体原因吗?

Xna是建立在DirectX和Directx上的,使用这个策略是因为显示驱动程序是如何从video板上获取信息的。 (实际上它公开了一个字节数组)。 同样为了给你一个二维数组,api需要知道每个纹理元素的“大小”以及你纹理的尺寸来进行转换。 出于性能原因,他们让用户决定是否需要/需要进行转换。

你总是可以将恢复的数组转换成2d的数组。 (或者你可以把它包装在一个类,使坐标转换)

正如Tpastor对于为什么有一个很好的答案,这里是如何将它从难以读取的一维数组,转换为简单的二维数组,以便于访问每个像素。

Color[,] TextureTo2DArray(Texture2D texture) { Color[] colorsOne = new Color[texture.Width * texture.Height]; //The hard to read,1D array texture.GetData(colorsOne); //Get the colors and add them to the array Color[,] colorsTwo = new Color[texture.Width, texture.Height]; //The new, easy to read 2D array for (int x = 0; x < texture.Width; x++) //Convert! for (int y = 0; y < texture.Height; y++) colorsTwo[x, y] = colorsOne[x + y * texture.Width]; return colorsTwo; //Done! }