密码学手机移动程序开发Android开发

奇技淫巧之Android生成二维码工具类

2017-01-20  本文已影响567人  Anderson大码渣
CaptainAndroid.png

前言

生成二维码是我们经常要做的事情,而google为我们提供了zxing这个生成二维码的工具包,帮助我们生成二维码.

在此附上所用的生成二维码工具类.

工具类

import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;

import java.util.Hashtable;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;


public class Utils {


    public static Bitmap createQRImage(Context context, View view, String id) {
        try {
            if (id == null || id.isEmpty()) {
                return null;
            }
            int width = 520;
            int height = 520;
            Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
            hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
            BitMatrix bitMatrix = new QRCodeWriter().encode(id,
                    BarcodeFormat.QR_CODE, width, height, hints);
            bitMatrix = deleteWhite(bitMatrix);
            int[] rec = bitMatrix.getEnclosingRectangle();
            width = rec[2] + 1;
            height = rec[3] + 1;
            int[] pixels = new int[width * height];
            for (int y = 0; y < height; y++) {
                for (int x = 0; x < width; x++) {
                    if (bitMatrix.get(x, y)) {
                        pixels[y * width + x] = 0xff000000;
                    } else {
                        pixels[y * width + x] = 0xffffffff;
                    }
                }
            }
            Bitmap bitmap = Bitmap.createBitmap(width, height,
                    Bitmap.Config.ARGB_8888);
            bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
            return bitmap;
        } catch (WriterException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static BitMatrix deleteWhite(BitMatrix matrix) {
        int[] rec = matrix.getEnclosingRectangle();
        int resWidth = rec[2] + 1;
        int resHeight = rec[3] + 1;

        BitMatrix resMatrix = new BitMatrix(resWidth, resHeight);
        resMatrix.clear();
        for (int i = 0; i < resWidth; i++) {
            for (int j = 0; j < resHeight; j++) {
                if (matrix.get(i + rec[0], j + rec[1])) {
                    resMatrix.set(i, j);
                }
            }
        }
        return resMatrix;
    }
}

使用

        ImageView mQRCode = (ImageView) mView.findViewById(R.id.qrcode);
        Bitmap bitmap = Utils.createQRImage(context, mQRCode, info);
        if (bitmap != null && !bitmap.isRecycled()) {
            mQRCode.setImageBitmap(bitmap);
        }

谢谢大家阅读,如有帮助,来个喜欢或者关注吧!


本文作者:Anderson/Jerey_Jobs

博客地址 : 夏敏的博客/Anderson大码渣/Jerey_Jobs

简书地址 : Anderson大码渣

CSDN地址 : Jerey_Jobs的专栏

github地址 : Jerey_Jobs

上一篇下一篇

猜你喜欢

热点阅读