我在尝试为 android 设备编写位图操作算法时遇到了一个问题。
我有一个 1680x128 像素的位图,需要对其应用过滤器。但是这个非常简单的代码片段实际上花了将近 15-20 秒才能在我的 Android 设备上运行(带有 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 秒或更长时间。这是一项如此昂贵的手术吗?