[英]Why is my Android app so slow?
我在int數組(int []像素)中有一個圖像(大小為1024x1024),並且正在使用以下循環反轉一個通道...
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++;
}
}
您可能需要考慮使用ColorMatrix類來完成此任務: http : //developer.android.com/reference/android/graphics/ColorMatrix.html
當按照您的方式操作單個像素時,很可能涉及相當大的開銷。 ColorMatrix類是您的朋友。
我認為,如果您以此替換這段代碼,它將相對較快
int w = bitmap.getWidth();
int h = bitmap.getHeight();
int pixels[] = new int[w * h];
bitmap.getPixels(pixels, 0, w, 0, 0, w, h);
int n = w * h;
for (int i = 0; i < n; i++) {
int color = pixels[i];
pixels[i] = Color.argb(Color.alpha(color), 255 - Color.red(color), Color.green(color), Color.blue(color));
}
bitmap.setPixels(pixels, 0, w, 0, 0, w, h);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.