c - 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];
}
}
}
}
解决方案
推荐阅读
- sql - 两个日期之间的完整日历月
- python - 直方图中的断轴和 Python 中的概率分布
- ios - 如何将核心数据对象分组为 UITableView 的数据源
- node.js - Alexa Smart Home Skill - 需要帮助才能发出 http 请求
- javascript - 在 JavaScript/ES6/ES7 中迭代数组中的嵌套值
- html - 采用柔性设计的固定头
- input - 在另一个字段中使用下拉输入作为占位符
- azure - Azure DevOps YAML模板传递哈希集/映射/字典/对象-键值?
- c# - C# 属性和方法
- mysql - 我试图用 sql 实现这段代码,但仍然给我一个错误,我真的不知道为什么