所以我有一个带有N个值的一维数组,其中N是一个完美的正方形.我将这个一维数组可视化为二维数组(尽管它不是).例如,具有值的数组int Array = { 0,1,2,3,4,5,6,7,8 }
那是
int *Array = new int [9];
for ( int i = 0 ; i < 9 ; i ++ )
Array[i] = i; // For example
Run Code Online (Sandbox Code Playgroud)
打印为
0 1 2
3 4 5
6 7 8
Run Code Online (Sandbox Code Playgroud)
所以,我想在一维数组中交换位置,以便我得到它的转置,...
例如...
0 3 6
1 4 7
2 5 8
Run Code Online (Sandbox Code Playgroud)
这基本上是相同的一维数组,但交换的值使得数组现在是int Array = {0,3,6,1,4,7,2,5,8}
如果我将它缩放到1024*1024维度的数组,逻辑将如何?
我有一个平坦的字节RGB值数组R1 G1 B1 R2 G2 B2 R3 G3 B3 ... Rn Gn Bn.所以我的数据看起来像:
char imageData[WIDTH * HEIGHT * 3];
Run Code Online (Sandbox Code Playgroud)
但我想将WIDTH*HEIGHT数组传递给现有的C库,该库需要这个数据的单个平面.这将只是R值(或只是G,或只是B)的序列.
分配新数组并复制数据(duh)很容易.但是图像非常大.如果它不是一个C库,而是采用某种迭代接口来精细化"切片"遍历,那就太棒了.但是我无法编辑我正在调用的代码......它需要一个指向一块顺序内存的普通旧指针.
但是我有对这个数组的写访问权限.创建一个将其分类为彩色平面的例程是可行的.我还需要一个可以反转的反向转换,但根据定义,将它分类为平面的相同方法可以应用于取消它.
我(在适当的位置)如何有效地将此阵列转换为R1 R2 R3 ... Rn G1 G2 G3 ... Gn B1 B2 B3 ... Bn然后再返回?任何非天真的算法?