将三维阵列参考转换为一维阵列

时间:2010-06-08 15:39:29

标签: c++ c

如果有一个ar [5000]数组,那么如果这是一个三维数组,怎么能找到元素[5] [5] [4]的位置?感谢

我正在映射像素: 想象一下[768 * 1024 * 4]的bimap 像素[5] [5] [4]在哪里?

我想这样做:

static GLubyte checkImage[checkImageHeight][checkImageWidth][4];

static GLuint texName;
bool itt;
void makeCheckImage(void)
{
    Bitmap *b = new Bitmap(L"c:/boo.png");

    int i, j, c;
    Color cul;

    for (i = 0; i < checkImageHeight; i++) {
        for (j = 0; j < checkImageWidth; j++) {
            b->GetPixel(j,i,&cul);


            checkImage[i][j][0] = (GLubyte) cul.GetR();
            checkImage[i][j][1] = (GLubyte) cul.GetG();
            checkImage[i][j][2] = (GLubyte) cul.GetB();
            checkImage[i][j][3] = (GLubyte) cul.GetA();
        }
    }
    delete(b);
}

无需制作多维数组即可完成工作。 width = 512,height = 1024 ....

3 个答案:

答案 0 :(得分:7)

这将取决于假想的三维阵列的尺寸以及它的布局。有时候公式是ar[z * x_size * y_size + y * x_size + x] == ar[z][y][x],但是如果不知道每个维度的大小以及它们的顺序,就没有办法确定。

答案 1 :(得分:0)

您需要知道尺寸的大小。如果您希望将其解释为ar[m][n][p]数组,那么mnp=5000ar[5][5][4]将与ar[5*m*n+5*n+4]对应。

这是因为C ++在行主要顺序中工作。

答案 2 :(得分:0)

[x * z_size * y_size + y * z_size + z]工作