我有一個平面數組的字節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