Skip to content

Commit

Permalink
feat: convert image to black and white before decode
Browse files Browse the repository at this point in the history
  • Loading branch information
gevgasparyan committed Oct 16, 2024
1 parent 501e04b commit e561d0c
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Paint;
import android.net.Uri;
import android.util.Base64;
import android.util.Log;
Expand Down Expand Up @@ -293,7 +296,11 @@ public static Bitmap generateQrCode(String myCodeText, int qrWidth, int qrHeight
return bitmap;
}

public static Result[] scanQRImage(Bitmap bMap) throws Exception {
public static Result[] scanQRImage(Bitmap _bMap) throws Exception {

Bitmap BWBitmap = createBlackAndWhite(_bMap);
Bitmap bMap = invertBitmap(BWBitmap);

int[] intArray = new int[bMap.getWidth() * bMap.getHeight()];
//copy pixel data from the Bitmap into the 'intArray' array
bMap.getPixels(intArray, 0, bMap.getWidth(), 0, 0, bMap.getWidth(), bMap.getHeight());
Expand Down Expand Up @@ -322,6 +329,52 @@ public static Result[] scanQRImage(Bitmap bMap) throws Exception {

}

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

Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();

ColorMatrix matrixGrayscale = new ColorMatrix();
matrixGrayscale.setSaturation(0);

ColorMatrix matrixInvert = new ColorMatrix();
matrixInvert.set(new float[]
{
-1.0f, 0.0f, 0.0f, 0.0f, 255.0f,
0.0f, -1.0f, 0.0f, 0.0f, 255.0f,
0.0f, 0.0f, -1.0f, 0.0f, 255.0f,
0.0f, 0.0f, 0.0f, 1.0f, 0.0f
});
matrixInvert.preConcat(matrixGrayscale);

ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrixInvert);
paint.setColorFilter(filter);

canvas.drawBitmap(src, 0, 0, paint);

return bitmap;
}

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

Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, 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(src, 0, 0, paint);
return bmpGrayscale;
}

public static File ensureDirExists(File dir) throws IOException {
if (!(dir.isDirectory() || dir.mkdirs())) {
throw new IOException("Couldn't create directory '" + dir + "'");
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "rn-qr-generator",
"version": "1.4.0",
"version": "1.4.1",
"description": "React native QR Code generator / reader",
"main": "index.js",
"types": "typings/index.d.ts",
Expand Down

0 comments on commit e561d0c

Please sign in to comment.