我在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.BLUE”替换“Color.argb(Color.alpha(color),255 - Color.red(color),Color.green(color),Color.blue(color))”,变得更快。
找到了解决方法。
如果我使用自己的按位运算符而不是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++;
}
}
答案 0 :(得分:0)
您可能需要考虑使用ColorMatrix类来完成此任务:http://developer.android.com/reference/android/graphics/ColorMatrix.html
在按照您的方式操作单个像素时,很可能会产生相当大的开销。 ColorMatrix课程是你的朋友。
答案 1 :(得分:0)
我认为如果用这个替换这段代码,它会相对较快
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);