二维码图片生成及保存(Android)

作者: wxyass 分类: Android 发布时间: 2017-02-28 16:44

Android二维码图片生成及保存

Demo1下载:
http://oss.wxyass.com/wxyass/demo/Android_ErWeiMa.rar

Demo2下载:
http://oss.wxyass.com/wxyass/demo/BarCodeTestActivity.rar

在app中,经常有生成识别二维码的功能,我们一般是使用zxing这个开源库来实现。

使用zxing生成Bitmap的代码如下:

/**
     * 生成二维码图片
     * 
     * @param text
     *            二维码文本
     * @return
     */
    public static Bitmap createQrBitmap(String text, int qrWidth, int qrHeight) {
        try {
            // 需要引入core包
            if (text == null || "".equals(text) || text.length() < 1) {
                return null;
            }
            Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
            hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
            BitMatrix bitMatrix = new QRCodeWriter().encode(text, BarcodeFormat.QR_CODE, qrWidth, qrHeight, hints);

            int width = bitMatrix.getWidth();
            int height = bitMatrix.getHeight();
            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;
    }

这样就可以生成一个二维码的图片,我们可以用一个ImageView来显示。
但是有很多人在保存的时候,打开发现时黑的。原因就是

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;
                    }
                }
            }

这儿pixels[y * width + x] = 0xffffffff; 代码没有加上去,加上就好了

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注