美文网首页移动互联网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