美文网首页移动互联网Android知识Android开发
Android zxing 二维码 bitmap存到本地,解决图

Android zxing 二维码 bitmap存到本地,解决图

作者: 程序员K哥 | 来源:发表于2016-07-28 00:13 被阅读1750次

    未经本人授权,不得转载!否则必将维权到底

    导语:

    最近项目有个需求,需要用zxing生成二维码,并且将生成的二维码保存到本地相册。生成二维码并没有出现问题,但是将二维码保存到本地相册时,发现保存的图片一片漆黑。为了解决这个问题也花了点时间,觉得有必要记录下来,利人利己。

    在ImageView里面看的时候是正常的:

    图例1.png

    保存到了本地相册竟然变成了一张纯黑色的图片,里面并不是二维码图片。

    图例2.jpg

    先来看下创建二维码的代码:

    /** 
      * Created by KeithXiaoY on 2016/7/27. 
      * 生成一个二维码图像
      * 
      * @param url 
      *            传入的字符串,通常是一个URL 
      * @param widthAndHeight 
      *           图像的宽高 
      * @return 
      */
    private static final int BLACK = 0xff000000;
    private static final int WHITE = 0xffffffff;
    public static Bitmap createQRCode(String str, int widthAndHeight)
       throws WriterException {
          Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
          hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
          BitMatrix matrix = new MultiFormatWriter().encode(str,BarcodeFormat.QR_CODE, widthAndHeight, widthAndHeight);
          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] = BLACK;
                 }
             }
          }
          Bitmap bitmap = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888);
          bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
          return bitmap;
    }
    

    最后找到bug的原因了:

    在ImageView中显示正常,是因为ImageView中没有颜色的位置默认使用的是白色的替代的,但是保存成png后,没有颜色的位置使用的是黑色替代的,所以会看到生成的图片是全黑的。

    一行代码就搞定了这个bug,代码如下:

    图例3.png

    结束语:

    开发中遇到Bug是不可避免的,但是有些Bug真的是遇到一次以后再也不用担心了。写下这篇博客,当别人遇到这个问题的时候能快速解决,这就是我的初衷。


    欢迎关注我的微信公众号与我交流,希望与大家共同成长,未来是属于我们的!

    相关文章

      网友评论

      本文标题:Android zxing 二维码 bitmap存到本地,解决图

      本文链接:https://www.haomeiwen.com/subject/knfkjttx.html