int配列(int []ピクセル)に(サイズ1024x1024の)画像があり、次のループを使用して1つのチャネルを反転しています...
int i = 0;
for (int y = 0; y < H; y++) {
for (int x = 0; x < W; x++) {
int color = pixels[i];
pixels[i] = Color.argb(Color.alpha(color), 255 - Color.red(color), Color.green(color), Color.blue(color));
i++;
}
}
私の新しい Galaxy S4 フォンでは、これに 1 秒以上かかります。古いiPhoneでも同様のループが瞬く間に実行されます。ここで私が間違っていることはありますか?
「Color.argb(Color.alpha(color), 255 - Color.red(color), Color.green(color), Color.blue(color))」を「Color.BLUE」に置き換えると、はるかに高速になります.
回避策を見つけました。
Color 関数の代わりに独自のビット演算子を使用すると、はるかに高速になります...
int i = 0;
for (int y = 0; y < H; y++) {
for (int x = 0; x < W; x++) {
int color = pixels[i];
int red = ((color & 0x00ff0000) >> 16);
pixels[i] = (color & 0xff00ffff) | ((255 - red) << 16);
//pixels[i] = Color.argb(Color.alpha(color), 255 - Color.red(color), Color.green(color), Color.blue(color));
i++;
}
}