未经本人授权,不得转载!否则必将维权到底
导语:
最近项目有个需求,需要用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真的是遇到一次以后再也不用担心了。写下这篇博客,当别人遇到这个问题的时候能快速解决,这就是我的初衷。
欢迎关注我的微信公众号与我交流,希望与大家共同成长,未来是属于我们的!
网友评论