簡體   English   中英

為什么我的Android應用這么慢?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM