我有一个平面数组的字节RGB值,其值为R1 G1 B1 R2 G2 B2 R3 G3 B3 ... Rn Gn Bn
。所以,我的数据是这样的:用于从RGB值数组中切片平面的算法
char imageData[WIDTH * HEIGHT * 3];
但我想通过一个宽*高阵列到现有的C库,预计这一数据的一个平面上。那将只是R值的序列(或者只是G,或者只是B)。
很容易分配新阵列并复制数据(duh)。但图像非常大。如果它不是一个C库,但采取了某种迭代界面来细化“切片”遍历,那就太好了。但是我无法编辑我正在调用的代码......它需要一个普通的旧指针指向一个连续内存块。
但是我有写入权限这个数组。创建一个可以将它分类到颜色平面的例程是可行的。我还需要一个反转转换,将它放回去,但根据定义,将它分类为多个平面的相同方法可用于将它退出。
我该如何有效地将这个阵列变成R1 R2 R3 ... Rn G1 G2 G3 ... Gn B1 B2 B3 ... Bn
然后再回来?任何非天真的算法?
您正在讨论转置3xN矩阵。天真的转置操作效率低下,因为它充满了缓存未命中。谷歌的“缓存高效转置”。 –
http://en.wikipedia.org/wiki/In-place_matrix_transposition#Algorithms – FUD
很好,老实说,我认为你应该考虑只是分配更多的内存..作为一个就地换位非方矩阵是讨厌的 – FUD