Android デバイス用のビットマップ操作アルゴリズムを作成しようとしているときに問題が発生しました。
1680x128 ピクセルのビットマップがあり、フィルターを適用する必要があります。しかし、この非常に単純なコード片は、私の Android デバイス (1Ghz プロセッサを搭載した xperia ray) で実際に実行するのに約 15 ~ 20 秒かかりました。
そのため、ボトルネックを見つけようとし、できるだけ多くのコード行を削減して、実行にほぼ同じ時間を要したループ自体に行き着きました。
for (int j = 0; j < 128; j++) {
for (int i = 0; i < 1680; i++) {
Double test = Math.random();
}
}
このようなデバイスが、難しい操作のない単純な for ループで非常に多くの時間を費やすのは正常ですか?
私はモバイルデバイスでのプログラミングに非常に慣れていないため、この質問がばかげている場合はご容赦ください。
更新: いくつかの簡単な操作でより高速になりました。
しかし、私の主な問題に戻ります:
public static void filterImage(Bitmap img, FilterStrategy filter) {
img.prepareToDraw();
int height = img.getHeight();
int width = img.getWidth();
RGB rgb;
for (int j = 0; j < height; j++) {
for (int i = 0; i < width; i++) {
rgb = new RGB(img.getPixel(i, j));
if (filter.isBlack(rgb)) {
img.setPixel(i, j, 0);
} else
img.setPixel(i, j, 0xffffffff);
}
}
return;
}
上記のコードは、デバイス上でより高速に実行するために本当に必要なものです。(ほぼ即時) 最適化の可能性はありますか?
RGB は、赤、緑、青の値を計算するクラスにすぎず、3 つの色部分すべてが 100 または指定された値を下回る場合、フィルターは単純に true を返します。img.getPixel(i,j) または setPixel のループにはすでに 20 秒以上かかります。これはそんなに高価な操作ですか?