首页 > 解决方案 > C - 使用 4D 坐标索引 2D 平铺数据

问题描述

我正在编写一个 BC1 纹理压缩器,它压缩独立的 4x4 纹素块。我正在拍摄 2D 图像并将其转换为 4x4 纹素块的 2D 网格,因此 2D 到 4D。它实际上是 5D 到 3D,因为每个纹素有 4 个组件,但这是一个简单的循环迭代通道,但这些是恒定的并且可以被分解。我知道我需要 4 个嵌套循环,但是 4D 中的数组索引打破了我的大脑。这是我想出的,但它错过了指数范围。我显然做错了什么。

#define LIM_X 2
#define LIM_Y 2
#define LIM_I 4
#define LIM_J 4

unsigned int x, y, i, j;
unsigned char src[LIM_Y * LIM_J][LIM_X * LIM_I]; // 8 by 8
unsigned char tmp[LIM_Y][LIM_X][LIM_J][LIM_I];   // 2 by 2 by 4 by 4

for(y = 0; y < LIM_Y; y++) {
    for(x = 0; x < LIM_X; x++) {
        for(j = 0; j < LIM_J; j++) {
            for(i = 0; i < LIM_I; i++) {
                tmp[y][x][j][i] = src[y * LIM_J + j][x * LIM_I + i];
            }
        }
    }
}

标签: cmultidimensional-array

解决方案


推荐阅读