修正Android基于ZXing的二维码扫描——横竖屏自由切换
概述:
此博客是基于开源的框架ZXing。ZXing用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。ZXing可以实现使用手机的内置的摄像头完成条形码的扫描及解码。该项目可实现的条形码编码和解码。
资源下载:
http://download.csdn.net/detail/u013761665/8853561
修改为竖屏显示:
第1步:
进入com.google.zxing.client.android包下的CaptureActivity类:
注释以下代码:
if (prefs.getBoolean(PreferencesActivity.KEY_DISABLE_AUTO_ORIENTATION, true)) {setRequestedOrientation(getCurrentOrientation());} else {setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);}
第2步:
进入com.google.zxing.client.android包下的DecodeHandler类:
在代码
PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(data, width, height);
上面添加:
byte[] rotatedData = new byte[data.length];for (int y = 0; y < height; y++) {for (int x = 0; x < width; x++)rotatedData[x * height + height - y - 1] = data[x + y * width];}int tmp = width; // Here we are swapping, that's the difference to #11width = height;height = tmp;data = rotatedData;
第3步:
进入com.google.zxing.client.android.camera包下的CameraConfigurationManager类:
在Log.i(TAG, "Screen resolution: " + screenResolution)的下面添加:
Point screenResolutionForCamera = new Point();
screenResolutionForCamera.x = screenResolution.x;
screenResolutionForCamera.y = screenResolution.y;
if (screenResolution.x < screenResolution.y) {screenResolutionForCamera.x = screenResolution.y;screenResolutionForCamera.y = screenResolution.x;
}
cameraResolution = CameraConfigurationUtils.findBestPreviewSizeValue(parameters, screenResolutionForCamera);
第4步:
进入com.google.zxing.client.android.camera包下的CameraConfigurationManager类:
在代码camera.setParameters(parameters)的上面添加:
camera.setDisplayOrientation(90);
第5步:
进入com.google.zxing.client.android.camera包下的CameraManager类:
将代码:
rect.left = rect.left * cameraResolution.x / screenResolution.x;rect.right = rect.right * cameraResolution.x /screenResolution.x;rect.top = rect.top * cameraResolution.y / screenResolution.y;rect.bottom = rect.bottom * cameraResolution.y /screenResolution.y;
替换成:
rect.left = rect.left * cameraResolution.y / screenResolution.x;rect.right = rect.right * cameraResolution.y / screenResolution.x;rect.top = rect.top * cameraResolution.x / screenResolution.y;rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y;
横竖屏自由切换:
上面的5步操作会让原本横屏扫描变为竖屏扫描。不过只能是一个方向上的。如果你想让用户可以在横屏和竖屏两种情况下都能使用的话,就要做一些必要的处理了。
主要的思路就是,设置一个标志位Flag来标志当前的横竖屏状态。Flag是在扫描界面CaptureActivity的onResume的时候进行变换,并对外提供getter接口。不过在我的代码中还用到了一点就是使用EventBus框架来发布信息。
横竖屏情况下的对比图:
注:图中扫描的对象是其他的事物,要是对准了真实的二维码,那就可能截不到其扫描的屏幕了。本博客指在说明ZXing的横竖屏切换问题。
竖屏
横屏
修正Android基于ZXing的二维码扫描——横竖屏自由切换相关推荐
- Android 基于Zxing的二维码扫描优化
最近公司项目App中要集成二维码扫描来适应在户外工作的时候,对码头集装箱等上面贴的A4纸张打印的二维码进行识别, 一般App二维码集成后,能扫出来就不管了,但是我们在集成成功后,根据用户反馈,在户外的 ...
- 基于zxing的二维码扫描
前言 现在的应用中二维码扫描已经成为一个应用必不可少的功能,现在大部分Android二维码扫描都是基于zxing和Zbar,这文章就来介绍一下基于zxing的二维码扫描.先看下效果图 虽然现在的关于二 ...
- 基于zxing的二维码扫描(软件界面)
原文地址:https://www.jianshu.com/p/ee2ee7677831 前言 现在的应用中二维码扫描已经成为一个应用必不可少的功能,现在大部分Android二维码扫描都是基于zxing ...
- Android实战——Zxing实现二维码扫描
Zxing实现二维码扫描 前言: 本篇文章从初学者的角度出发,从一个不知道对二维码扫描怎么下手的工作者,需要一个简单的扫描功能的话,可以阅读该篇文章.作为Google开源框架Zxing,里面的文件很大 ...
- JAVA实现基于ZXing的二维码自动生成与图片合成
JAVA实现基于ZXing的二维码自动生成与图片合成 近日做项目需要生成带有信息的二维码,并嵌入到一张图片中.实现思路采用Zxing生成二维码,java图形库进行图片的嵌入. 生成二维码 ZXing是 ...
- 基于zxing生成二维码
目录 1.二维码的原理 2.基于zxing生成二维码 3.逻辑及其应用 完整代码:https://github.com/122537067/zxingQRcodeLogoColor 效果图: 1.二维 ...
- Android用Zxing扫二维码/生成二维码功能
新年已过,一切恢复真正常,新的一年给自己几句指引: 光努力还不行,方向很重要. 总是想着最坏的结果,就会让人失去改变的勇气. 你当然有权利选择自己的人生--但只有在你真正强大后,逆行的阻力才会降到最小 ...
- 基于ZXing的二维码,你可以这样改造它
概述: 如果你下载了ZXing的源码和ZXing的core.jar包,那么你现在就可以进行如下的一系列修改来自定义你的二维码扫描了. 本文链接:http://blog.csdn.net/lemon_t ...
- Android利用zxing生成二维码
感谢大佬:https://blog.csdn.net/mountain_hua/article/details/80646089 **gayhub上的zxing可用于生成二维码,识别二维码 gayhu ...
最新文章
- 浅谈Java中的Set、List、Map的区别
- Oracle imp字符集转换,imp/exp 字符集转换
- android fragment 生命周期
- Visual C# 2008+SQL Server 2005 数据库与网络开发--第13章 使用菜单和对话框
- 机器学习、数据挖掘之中国大牛
- 南华大学ACM队2021年7.14训练赛题解
- 【电路与电子技术】笔记 (完结)
- JUnit执行单元测试用例成功,mvn test却失败的问题和解决方法
- avaya CM查看VDN指向的技能组
- 计算机专业在经济社会的应用,计算机技术对社会发展的影响
- 使用Resnet网络对人脸图像分类识别出男女性别(包含数据集制作+训练+测试)
- 怎么修改服务器上传图片,更换服务器后,为什么百度编辑器无法上传图片了
- ios状态栏,导航栏,工具栏,tab栏的位置,附图
- 直播预告 | NeurIPS 专场一 青年科学家专场
- OpenWrt路由开启DDNS+端口转发进行外网访问
- 2018年吉林大学软件学院软件工程专硕复试题目回忆
- es6 语法,在 IE 中不兼容的处理办法
- NTLDR is missing和NTLDR is compressed的解决办法
- 【自语】如何前后端的web及移动都打通?
- 扫码支付吃个煎饼,街边摊支付的背后也要有大数据运营
热门文章
- 深度探索C++ 对象模型(6)-Data member的绑定
- [JAVA基础] 成员变量和局部变量(一看就懂的总结归纳篇)
- 【django】配置文件
- [Issue Fixed]-repo-error: .repo/manifests/: contains uncommitted changes
- 国密算法SM3(杂凑算法)
- DC-5 vulnhub靶机实战
- Python的一些技巧
- 【Curl】 获取网站下载速率(Bytes/s)
- 【grafana】API 遇到的问题
- 1.6 Java数组也是一种数据类型