我刚碰到一个问题,同时试图为Android设备编写位图操作算法。for循环在Android设备上很慢
我有一个1680x128像素的位图,需要对其应用过滤器。但是这个非常简单的代码片段在我的Android设备上运行了将近15-20秒(带有1Ghz处理器的xperia ray)。
所以我试图找到瓶颈,减少尽可能多的代码行,并最终与循环本身,这几乎同时运行。
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只是一个计算红色,绿色和蓝色值的类,如果所有三个颜色部分都低于100或任何其他指定值,则过滤器会简单地返回true。 img.getPixel(i,j)或setPixel周围的循环需要20秒或更多秒。这是一个如此昂贵的操作吗?
好的,我马上试试。谢谢你到目前为止。 – Woyzeck 2012-04-12 12:11:42
这个和其他一些变化加快了算法。感谢您的快速建议:) – Woyzeck 2012-04-12 14:46:40