最近写Android程序需要用到 zxing 框架进行二维码生成和解析,记录一下使用过程。

首先,需要导包: 在 Project Structure 中点击加号, 然后在 Library Dependency 中搜索**zxing-core** 并安装并且重新**sync**


将二维码图片解析为文本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
	//将二维码图片解析为文本
    private void parseQRCode(ImageView imageView) {
		//把ImageView中的图片转换成Bitmap
        Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
		//获取图片宽高
        int width = imageView.getWidth();
        int height = imageView.getHeight();
		//创建存放像素点的数组
        int pixels[] = new int[width * height];
		//从bitmap中获取像素点
        bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
		//把bitmap转成BinaryBitmap
        BinaryBitmap bb = new BinaryBitmap(new HybridBinarizer(new RGBLuminanceSource(width, height, pixels)));
        QRCodeReader qrCodeReader = new QRCodeReader();
        try {
			//调用decode方法进行解码
            Result result = qrCodeReader.decode(bb);
            String text = result.getText();
            Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
        } catch (NotFoundException e) {
            e.printStackTrace();
        } catch (ChecksumException e) {
            e.printStackTrace();
        } catch (FormatException e) {
            e.printStackTrace();
        }
    }

将文本内容转换为Bitmap

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
 //为指定文本生成为指定宽高的二维码Bitmap图片
    private Bitmap createQRCode(String content, int width, int height) {
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        try {
            //将文本转换为二维矩阵,编码为QR_CODE
            BitMatrix matrix = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, width, height);
            //存放像素点数组
            int pixels[] = new int[width * height];
            //一列一列往数组里添加,也可以一行一行
            for (int i = 0; i < width; i++) {
                for (int j = 0; j < height; j++) {
                    //matrix.get(i, j)返回x,y位置是否是黑色
                    pixels[height * i + j] += matrix.get(j, i) ? 0x000000 : 0xffffff;
                }
            }
            //根据像素的创建Bitmap
            return Bitmap.createBitmap(pixels, width, height, Bitmap.Config.RGB_565);
        } catch (WriterException e) {
            e.printStackTrace();
        }
        return null;
    }

#2019-04-10更新 中文乱码解决方法

QQ截图20190328222345.png