我正在尝试尽快从 RGBA 图像数据中复制 1 或 2 个颜色通道(这是我的代码中最慢的部分,它会减慢整个应用程序的速度)。有没有一种快速复制的方法?
数据只是简单地布置为 RGBARGBARGBA 等,我只需要复制 R 值,或者在另一种情况下只复制 RG 值。
到目前为止,我所拥有的大致是复制 R 值:
for(int i=0; i<dataSize; i++){
dest[i] = source[i*4];
}
对于 RG 值,我正在做:
for(int i=0; i<dataSize; i+=2){
dest[i] = source[i*2];
dest[i+1] = source[(i*2)+1];
}
所有数据都是无符号的 1 字节值。有更快的方法吗?我已经部分展开了循环(每次迭代执行 64 个值——除此之外没有显着的加速)。平台是 Armv7 (iOS),所以使用 NEON (SIMD) 可能很有用,不幸的是,我对此的经验为零!
不幸的是,更改数据是不可能的,它是由 opengl 的 readPixels() 函数提供的,据我所知,iOS 不支持读取为 L、LA、RG 等。