アンドロイドデバイス用のビットマップ操作アルゴを書き込もうとしているときに、問題が発生しました。for-loopが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-loopで操作に時間がかかるのは正常ですか?
私はモバイルデバイスでプログラミングするのがとても新しいので、この質問がばかげている場合は申し訳ありません。
更新:いくつかの簡単な操作で、より速くなりました。
しかし、戻って私の主な問題に:
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秒以上かかります。これはそのような高価な操作ですか?
ええ、私は一瞬で試してみます。これまでにありがとうございました。 – Woyzeck
これといくつかの他の変更は、algoをスピードアップしました。このクイックアドバイスありがとう:) – Woyzeck