博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二维码生成与读取
阅读量:5076 次
发布时间:2019-06-12

本文共 3542 字,大约阅读时间需要 11 分钟。

生成QR图    private void createImage() {        try {            // 需要引入core包            QRCodeWriter writer = new QRCodeWriter();            String text = qr_text.getText().toString();            Log.i(TAG, "生成的文本:" + text);            if (text == null || "".equals(text) || text.length() < 1) {                return;            }            // 把输入的文本转为二维码            BitMatrix martix = writer.encode(text, BarcodeFormat.QR_CODE,                    QR_WIDTH, QR_HEIGHT);            System.out.println("w:" + martix.getWidth() + "h:"                    + martix.getHeight());            Hashtable
hints = new Hashtable
(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); BitMatrix bitMatrix = new QRCodeWriter().encode(text, BarcodeFormat.QR_CODE, QR_WIDTH, QR_HEIGHT, hints); int[] pixels = new int[QR_WIDTH * QR_HEIGHT]; for (int y = 0; y < QR_HEIGHT; y++) { for (int x = 0; x < QR_WIDTH; x++) { if (bitMatrix.get(x, y)) { pixels[y * QR_WIDTH + x] = 0xff000000; } else { pixels[y * QR_WIDTH + x] = 0xffffffff; } } } Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT); qr_image.setImageBitmap(bitmap); } catch (WriterException e) { e.printStackTrace(); } }

 

解析QR图片    private void scanningImage() {        Map
hints = new HashMap
(); hints.put(DecodeHintType.CHARACTER_SET, "utf-8"); // 获得待解析的图片 Bitmap bitmap = ((BitmapDrawable) qr_image.getDrawable()).getBitmap(); RGBLuminanceSource source = new RGBLuminanceSource(bitmap); BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source)); QRCodeReader reader = new QRCodeReader(); Result result; try { result = reader.decode(bitmap1, hints); // 得到解析后的文字 qr_result.setText(result.getText()); } catch (NotFoundException e) { e.printStackTrace(); } catch (ChecksumException e) { e.printStackTrace(); } catch (FormatException e) { e.printStackTrace(); } }

 

/**	 * 用字符串生成二维码	 * @param str	 * @author zhouzhe@lenovo-cw.com         * zxing是google的一个开源二维码项目,目前基本上和二维码打交道的东西,都会用到它. 最近项         *  目中用到了android手机需要根据提供的字符串生成二维码图片,之前用zxing做过二维码解码,         * 编码还没做过,看了一些demo都是用到了zxing的j2se包的内容,这个在android或者其他平台         * 上显然无法实现,所以我们要利用zxing生成二维矩阵,然后根据android平台的提供的api来         * 生成图片.         * 这一切,需要zxing的core包,在zxing 1.6下测试通过.	 * @return	 * @throws WriterException	 */	public Bitmap Create2DCode(String str) throws WriterException {		//生成二维矩阵,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败		BitMatrix matrix = new MultiFormatWriter().encode(str,BarcodeFormat.QR_CODE, 300, 300);		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] = 0xff000000;				}							}		}				Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);		//通过像素数组生成bitmap,具体参考api		bitmap.setPixels(pixels, 0, width, 0, 0, width, height);		return bitmap;	}

 

转载于:https://www.cnblogs.com/xiaosw/p/3584232.html

你可能感兴趣的文章
重构代码 —— 函数即变量(Replace temp with Query)
查看>>
Bootstrap栅格学习
查看>>
程序员的数学
查看>>
聚合与组合
查看>>
jQuery如何获得select选中的值?input单选radio选中的值
查看>>
设计模式 之 享元模式
查看>>
如何理解汉诺塔
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>
15 FFT及其框图实现
查看>>
Linux基本操作
查看>>
osg ifc ifccolumn
查看>>
C++ STL partial_sort
查看>>
3.0.35 platform 设备资源和数据
查看>>
centos redis 安装过程,解决办法
查看>>
IOS小技巧整理
查看>>
WebDriverExtensionsByC#
查看>>
我眼中的技术地图
查看>>
lc 145. Binary Tree Postorder Traversal
查看>>
sublime 配置java运行环境
查看>>
在centos上开关tomcat
查看>>