package com.example.myapplication.utils; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Color; import com.google.zxing.BarcodeFormat; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; /** * 二维码生成相关 */ public class CodeUtils { // 宽度值,影响中间图片大小 private static final int IMAGE_HALFWIDTH = 40; /** * 生成中间带图片的二维码 * * @param context 上下文 * @param content 二维码内容 * @param logo 二维码中间的图片 * @return 生成的二维码图片 * @throws WriterException 生成二维码异常 */ /** * 生成用户的二维码 * * @param context 上下文 * @param content 二维码内容 * @return 生成的二维码图片 * @throws WriterException 生成二维码异常 */ public static Bitmap createCode(Context context, String content) throws WriterException { //生成二维矩阵,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败 BitMatrix matrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, DensityUtils.dp2px(context, 250), DensityUtils.dp2px(context, 250)); 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; } else { pixels[y * width + x] = Color.WHITE; } } } Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); //通过像素数组生成bitmap bitmap.setPixels(pixels, 0, width, 0, 0, width, height); return bitmap; } }