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 などの読み取りを私が知る限りサポートしていません。