Android编程实现二维码的生成与解析
作者:lee0oo0 时间:2021-12-08 23:13:15
本文实例讲述了Android编程实现二维码的生成与解析。分享给大家供大家参考,具体如下:
直接上代码,代码上面有具体的解析,并且提供jar供下载:二维码Jar包.rar 。
根据文本生成对应的二维码:
// 生成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<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
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<DecodeHintType, String> hints = new HashMap<DecodeHintType, String>();
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();
}
}
希望本文所述对大家Android程序设计有所帮助。
标签:Android,二维码
0
投稿
猜你喜欢
Java异常处理try catch的基本用法
2022-11-27 11:36:15
用java在web环境下上传和下载文件的技巧
2021-06-09 18:17:17
Mybatis-Plus sum聚合函数及按日期查询并求和的方式详解
2022-07-09 12:58:07
Android判断用户2G/3G/4G移动数据网络
2022-12-13 03:21:49
C#中File类的文件操作方法详解
2022-10-04 01:25:28
Windows窗体的.Net框架绘图技术实现方法
2022-06-29 13:32:23
mybatis-plus QueryWrapper 添加limit方式
2022-12-09 02:08:11
Spring Boot小型项目如何使用异步任务管理器实现不同业务间的解耦
2022-11-21 07:49:54
初识Java环境变量配置及IDEA
2022-09-20 06:46:41
详解java中BigDecimal精度问题
2021-08-17 10:24:59
mybatis多表查询的实现(xml方式)
2021-07-11 01:21:38
C# SQLite执行效率的优化教程
2021-07-11 00:11:41
全面分析c# LINQ
2023-10-25 16:35:16
c# 实现获取汉字十六进制Unicode编码字符串的实例
2023-03-21 11:22:35
Java实现雪花算法(snowflake)
2022-10-27 03:43:23
Android编程实现自定义系统菜单背景的方法
2023-07-16 22:02:51
详解java中的PropertyChangeSupport与PropertyChangeListener
2023-10-20 06:19:27
Java异常学习之自定义异常详解
2023-09-25 00:57:27
Android延迟实现的几种解决方法及原理分析
2023-10-24 18:07:15
java中Servlet程序下载文件实例详解
2022-04-28 18:26:10