Android 修改位图非常慢…还有其他方法吗?
我在这里试图通过编写以下方法将当前位图转换为黑白位图。但由于每个像素都有for循环,转换需要很长时间。我在任何地方都错了吗?或者还有其他方法吗?。我们将非常感谢您的帮助。谢谢 我的代码:Android 修改位图非常慢…还有其他方法吗?,android,bitmap,android-bitmap,android-color,android-paint,Android,Bitmap,Android Bitmap,Android Color,Android Paint,我在这里试图通过编写以下方法将当前位图转换为黑白位图。但由于每个像素都有for循环,转换需要很长时间。我在任何地方都错了吗?或者还有其他方法吗?。我们将非常感谢您的帮助。谢谢 我的代码: public Bitmap convert(Bitmap src) { final double GS_RED = 0.299; final double GS_GREEN = 0.587; final double GS_BLUE = 0.114;
public Bitmap convert(Bitmap src) {
final double GS_RED = 0.299;
final double GS_GREEN = 0.587;
final double GS_BLUE = 0.114;
int A, R, G, B;
final int width = src.getWidth();
final int height = src.getHeight();
int pixels[] = new int[width * height];
int k = 0;
Bitmap bitmap = Bitmap.createBitmap(width, height, src.getConfig());
src.getPixels(pixels, 0, width, 0, 0, width, height);
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int pixel = pixels[x + y * width];
A = Color.alpha(pixel);
R = Color.red(pixel);
G = Color.green(pixel);
B = Color.blue(pixel);
R = G = B = (int) (GS_RED * R + GS_GREEN * G + GS_BLUE * B);
pixels[x + y * width] = Color.argb(
A, R, G, B);
}
}
bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
return bitmap;
}
公共位图转换(位图src){
最终双GS_红=0.299;
最终双GS_绿=0.587;
最终双GS_蓝=0.114;
int A,R,G,B;
final int width=src.getWidth();
final int height=src.getHeight();
整数像素[]=新整数[宽度*高度];
int k=0;
位图Bitmap=Bitmap.createBitmap(宽度、高度,src.getConfig());
getPixels(像素,0,宽度,0,0,宽度,高度);
对于(int y=0;y
使用此方法,您可以轻松地将rgb图像转换为灰度,而无需遍历所有像素
public Bitmap toGrayscale(Bitmap bmp)
{
int originalwidth, originalheight;
originalheight = bmp.getHeight();
originalwidth = bmp.getWidth();
Bitmap bmpGrayscale = Bitmap.createBitmap(originalwidth, originalheight, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bmpGrayscale);
Paint paint = new Paint();
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
paint.setColorFilter(f);
c.drawBitmap(bmp, 0, 0, paint);
return bmpGrayscale;
}
可能重复使用颜色矩阵。他们一次处理整个彩色地图,而不是逐像素扫描图片。并且可以用于许多不同的效果。是的。它适用于灰度。但是对于其他滤镜,我在哪里可以给出R,G,B颜色?。。。