如何在Android中将彩色图像变为黑白

lak*_*man 9 android colors

当我在android中向用户显示时,我想知道将彩色图像(我从网上下载)转换为黑白的方法.任何人都可以在你的任何Android工作中找到这个要求.请告诉我.

谢谢Lakshman

Mun*_*oor 9

嗨,你可以使用对比度使图像黑色和白色.

看代码..

public static Bitmap createContrast(Bitmap src, double value) {
    // image size
    int width = src.getWidth();
    int height = src.getHeight();
    // create output bitmap
    Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig());
    // color information
    int A, R, G, B;
    int pixel;
    // get contrast value
    double contrast = Math.pow((100 + value) / 100, 2);

    // scan through all pixels
    for(int x = 0; x < width; ++x) {
        for(int y = 0; y < height; ++y) {
            // get pixel color
            pixel = src.getPixel(x, y);
            A = Color.alpha(pixel);
            // apply filter contrast for every channel R, G, B
            R = Color.red(pixel);
            R = (int)(((((R / 255.0) - 0.5) * contrast) + 0.5) * 255.0);
            if(R < 0) { R = 0; }
            else if(R > 255) { R = 255; }

            G = Color.red(pixel);
            G = (int)(((((G / 255.0) - 0.5) * contrast) + 0.5) * 255.0);
            if(G < 0) { G = 0; }
            else if(G > 255) { G = 255; }

            B = Color.red(pixel);
            B = (int)(((((B / 255.0) - 0.5) * contrast) + 0.5) * 255.0);
            if(B < 0) { B = 0; }
            else if(B > 255) { B = 255; }

            // set new pixel color to output bitmap
            bmOut.setPixel(x, y, Color.argb(A, R, G, B));
        }
    }

    return bmOut;
}
Run Code Online (Sandbox Code Playgroud)

在mathod调用中将double值设置为50.例如createContrast(Bitmap src, 50)

  • 这很棒,而且效果很好,但速度很慢.我正在普通的Android设备上转换6个jpeg 300px*300px图像,它需要6秒才能完成!有什么办法可以减少时间吗?我的意思是旁边使我的图像尺寸更小! (6认同)

len*_*ooh 5

使用内置方法:

public static Bitmap toGrayscale(Bitmap srcImage) {

    Bitmap bmpGrayscale = Bitmap.createBitmap(srcImage.getWidth(), srcImage.getHeight(), Bitmap.Config.ARGB_8888);

    Canvas canvas = new Canvas(bmpGrayscale);
    Paint paint = new Paint();

    ColorMatrix cm = new ColorMatrix();
    cm.setSaturation(0);
    paint.setColorFilter(new ColorMatrixColorFilter(cm));
    canvas.drawBitmap(srcImage, 0, 0, paint);

    return bmpGrayscale;
}
Run Code Online (Sandbox Code Playgroud)