public static Bitmap cretaeBitmap(Context c, String str, Bitmap mBitmap) throws WriterException { // 生成二维矩阵,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败 int qr_width = ScreenUtils.getScreenWidth(c) * 2 / 3; int qr_height = qr_width; BitMatrix matrix = new MultiFormatWriter().encode(str, BarcodeFormat.QR_CODE, qr_width, qr_height); // BitMatrix matrix = new MultiFormatWriter().encode(str, BarcodeFormat.QR_CODE, 300, // 300);//如果要指定二维码的边框以及容错率,最好给encode方法增加一个参数:hints 一个Hashmap int width = matrix.getWidth(); int height = matrix.getHeight(); // 二维矩阵转为一维像素数组,也就是一直横着排了 int halfW = width / 2; int halfH = height / 2; int[] pixels = new int[width * height]; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { if (x > halfW - Const.IMAGE_HALFWIDTH && x < halfW + Const.IMAGE_HALFWIDTH && y > halfH - Const.IMAGE_HALFWIDTH && y < halfH + Const.IMAGE_HALFWIDTH) { pixels[y * width + x] = mBitmap.getPixel( x - halfW + Const.IMAGE_HALFWIDTH, y - halfH + Const.IMAGE_HALFWIDTH); } else { // 此处可以修改二维码的颜色,可以分别制定二维码和背景的颜色; pixels[y * width + x] = matrix.get(x, y) ? 0xff000000 : 0xfffffff; } } } Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); // 通过像素数组生成bitmap bitmap.setPixels(pixels, 0, width, 0, 0, width, height); return bitmap; }
public static Bitmap Create2DCode(Context c, String str) throws WriterException { int qr_width = ScreenUtils.getScreenWidth(c) * 2 / 3; int qr_height = qr_width; BitMatrix matrix = new MultiFormatWriter().encode(str, BarcodeFormat.QR_CODE, qr_width, qr_height); int width = matrix.getWidth(); int height = matrix.getHeight(); int[] pixels = new int[width * height]; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { if (matrix.get(x, y)) { pixels[y * width + x] = 0xff000000; } } } Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, width, 0, 0, width, height); return bitmap; }