challa sathish kumar
challa sathish kumar

Reputation: 366

How to convert color image bitmap to black&white image bitmap in android?

In my Business Card Reader android application, I need to convert color image bitmap to black & white image bitmap (not gray scale image) for OCR text reading. so please help me to to convert color image bitmap to black & white image bitmap in android.

Upvotes: 2

Views: 5513

Answers (3)

Luca S.
Luca S.

Reputation: 1162

You could convert the image applying a color filter in this way:

Bitmap bwBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bwBitmap );
//set contrast
ColorMatrix contrastMatrix = new ColorMatrix();
//change contrast
float contrast = 50.f;
float shift = (-.5f * contrast + .5f) * 255.f;
contrastMatrix .set(new float[] {
       contrast , 0, 0, 0, shift ,
       0, contrast , 0, 0, shift ,
       0, 0, contrast , 0, shift ,
       0, 0, 0, 1, 0 });
//apply contrast
Paint contrastPaint = new Paint();
contrastPaint.setColorFilter(new ColorMatrixColorFilter(contrastMatrix ));
canvas.drawBitmap(colorBitmap, 0, 0, contrastPaint);

//set saturation
ColorMatrix saturationMatrix = new ColorMatrix();
saturationMatrix.setSaturation(0); //you set color saturation to 0 for b/w
//apply new saturation
Paint saturationPaint = new Paint();
saturationPaint.setColorFilter(new ColorMatrixColorFilter(saturationPaint));
canvas.drawBitmap(colorBitmap, 0, 0, saturationPaint); 

Upvotes: 2

bitcoiner
bitcoiner

Reputation: 41

This question is long ago, but probably I could help other users. I also had a long search for creating (fast)a pure Black and White bitmap.

My first methode used bitmap.getPixel() and bitmap.setPixel() This took about 8s (832 x 1532) New Method took 0.4s! Thanks factor 20!

Now I load all Pixels in an int array and go so through all pixels with getPixels(..) and setPixels(..): Here my method:

public static Bitmap createBlackAndWhite(Bitmap src) {
    int width = src.getWidth();
    int height = src.getHeight();

    Bitmap bmOut = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

    final float factor = 255f;
    final float redBri = 0.2126f;
    final float greenBri = 0.2126f;
    final float blueBri = 0.0722f;

    int length = width * height;
    int[] inpixels = new int[length];
    int[] oupixels = new int[length];

    src.getPixels(inpixels, 0, width, 0, 0, width, height);

    int point = 0;
    for(int pix: inpixels){
        int R = (pix >> 16) & 0xFF;
        int G = (pix >> 8) & 0xFF;
        int B = pix & 0xFF;

        float lum = (redBri * R / factor) + (greenBri * G / factor) + (blueBri * B / factor);

        if (lum > 0.4) {
            oupixels[point] = 0xFFFFFFFF;
        }else{
            oupixels[point] = 0xFF000000;
        }
        point++;
    }
    bmOut.setPixels(oupixels, 0, width, 0, 0, width, height);
    return bmOut;
}

Upvotes: 4

SimplyJaymin
SimplyJaymin

Reputation: 444

You need to use ColorMatrix and ColorFilterclass in android to convert to Black and White. Use this ColorMatrix - ColorMatrix cm1 = new ColorMatrix(new float[]{0.5f,0.5f,0.5f,0,0, 0.5f,0.5f,0.5f,0,0, 0.5f,0.5f,0.5f,0,0, 0,0,0,1,0,0, 0,0,0,0,1,0 });

Upvotes: 0

Related Questions