package com.secuso.privacyfriendlycodescanner.qrscanner.helpers; import android.graphics.Bitmap; import android.graphics.Color; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.ResultMetadataType; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import java.util.EnumMap; import java.util.Map; import static com.google.zxing.EncodeHintType.ERROR_CORRECTION; import static com.google.zxing.ResultMetadataType.ERROR_CORRECTION_LEVEL; public class Utils { public static Bitmap generateCode(String data, BarcodeFormat format, Map<EncodeHintType, Object> hints, Map<ResultMetadataType,Object> metadata) { if(hints == null) { hints = new EnumMap<>(EncodeHintType.class); } if(!hints.containsKey(ERROR_CORRECTION) && metadata != null && metadata.containsKey(ERROR_CORRECTION_LEVEL)) { Object ec = metadata.get(ERROR_CORRECTION_LEVEL); if(ec != null) { hints.put(ERROR_CORRECTION, ec); } } if(!hints.containsKey(ERROR_CORRECTION)) { hints.put(ERROR_CORRECTION, ErrorCorrectionLevel.L.name()); } return generateCode(data, format, hints); } public static Bitmap generateCode(String data, BarcodeFormat format, Map<EncodeHintType,?> hints) { try { MultiFormatWriter writer = new MultiFormatWriter(); BitMatrix result = writer.encode(data, format, 100, 100, hints); int width = result.getWidth(); int height = result.getHeight(); int[] pixels = new int[width * height]; // All are 0, or black, by default for (int y = 0; y < height; y++) { int offset = y * width; for (int x = 0; x < width; x++) { pixels[offset + x] = result.get(x, y) ? Color.BLACK : Color.WHITE; } } Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, width, 0, 0, width, height); return bitmap; } catch (WriterException e) { return null; } } }