- 浏览: 12084 次
- 性别:
- 来自: 成都
最新评论
最近在参加一次比赛,需要实现一个二维码扫描的功能,于是找到了google的开源框架Zxing,我们可以去http://code.google.com/p/zxing/下载源码和Jar包。下载下来运行时发现二维码在识别时是横屏的,用户体验很不爽,于是在网上求教大佬们支招。具体解决方法如下:
1、在AndroidManifest.xml中,修改CaptureActivity的属性:将android:screenOrientation="landscape"改为portrait
2、找到DecodeHandler.java,修改其中的decode方法:
将PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(data, width, height);注释掉,并添加下面代码段:
byte[] newData = new byte[data.length];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++)
newData[x * height + height - y - 1] = data[x + y * width];
}
int tmp = width;
width = height;
height = tmp;
PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(newData, width, height);
3、找到CameraManager.java,修改其中的getFramingRectInPreview方法:
注释掉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;
4、找到CameraConfigurationManager.java,修改其中的initFromCameraParameters方法:
在最后添加代码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 = getCameraResolution(parameters, screenResolutionForCamera);
5、同样是上面的类,修改其中的方法setDesiredCameraParameters方法:
在最后添加代码
// 使摄像头旋转90度
setDisplayOrientation(camera, 90);
并写一个方法代码如下:
/*改变照相机成像的方向的方法*/
protected void setDisplayOrientation(Camera camera, int angle) {
Method downPolymorphic = null;
try {
downPolymorphic = camera.getClass().getMethod("setDisplayOrientation", new Class[] { int.class });
if (downPolymorphic != null)
downPolymorphic.invoke(camera, new Object[]{angle});
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
至此修改已经结束,亲测有效。
参考文章:http://blog.csdn.net/chenbin520/article/details/16362459
http://407827531.iteye.com/blog/1488676
1、在AndroidManifest.xml中,修改CaptureActivity的属性:将android:screenOrientation="landscape"改为portrait
2、找到DecodeHandler.java,修改其中的decode方法:
将PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(data, width, height);注释掉,并添加下面代码段:
byte[] newData = new byte[data.length];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++)
newData[x * height + height - y - 1] = data[x + y * width];
}
int tmp = width;
width = height;
height = tmp;
PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(newData, width, height);
3、找到CameraManager.java,修改其中的getFramingRectInPreview方法:
注释掉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;
4、找到CameraConfigurationManager.java,修改其中的initFromCameraParameters方法:
在最后添加代码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 = getCameraResolution(parameters, screenResolutionForCamera);
5、同样是上面的类,修改其中的方法setDesiredCameraParameters方法:
在最后添加代码
// 使摄像头旋转90度
setDisplayOrientation(camera, 90);
并写一个方法代码如下:
/*改变照相机成像的方向的方法*/
protected void setDisplayOrientation(Camera camera, int angle) {
Method downPolymorphic = null;
try {
downPolymorphic = camera.getClass().getMethod("setDisplayOrientation", new Class[] { int.class });
if (downPolymorphic != null)
downPolymorphic.invoke(camera, new Object[]{angle});
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
至此修改已经结束,亲测有效。
参考文章:http://blog.csdn.net/chenbin520/article/details/16362459
http://407827531.iteye.com/blog/1488676
发表评论
-
Error:(1, 0) Your project path contains non-ASCII characters.
2017-04-27 18:23 507Today I will Android studio upd ... -
android studio R文件找不到
2017-03-15 17:16 208最近在参加一个比赛,比赛要求需要开发一个Android项 ... -
Android小程序--模拟焰火粒子和瀑布粒子
2017-02-16 10:03 203需要注意的是,粒子系统和前面开发的物理小球之间有类似的地 ... -
Android小程序-模拟小球平抛落地反弹到静止过程
2017-02-09 14:19 750一、开发运动体Movable类 ... -
Android开发Web Service通信
2017-02-03 15:22 454与HTTP通信方式相比,HTTP不能实现远程方法的调用, ... -
Android开发高级组件--ProgressBar(进度条组件)
2017-01-15 14:55 3101、进度条组件ProgressBar是在某些操作的进度发展情况 ... -
图形与动画在Android中的实现
2017-01-11 16:32 3711、简单图形的绘制 canva ... -
深入了解Intent
2017-01-09 16:56 6221、Intent组件在Android中 ... -
Android开发高级组件--ExpandableListView(可伸展的列表组件)
2017-01-06 11:17 4361、在Android开发中,有时候希望对列表项可以分组管理并实 ... -
Android高级开发--SimpleAdapter类
2017-01-05 18:30 1731、ArrayAdapter显示效果显得有些单一,如果希望在一 ... -
Android开发高级组件--ListView(列表显示组件)
2017-01-02 23:11 1581、与ScrollView类似的还有一种列表组件ListVie ... -
Android开发高级组件--ScrollView(滚动视图组件)
2016-12-26 19:04 4181、手机屏幕的高度有限,当需要显示多组信息时,ScrollVi ... -
关于Andorid的RecyclerView在V7包下找不到的解决办法
2016-12-15 20:15 298最近在学习使用RecyclerView替换现有的Lis ... -
关于Android开发中的android.os.networkonmainthreadexception问题
2016-12-11 15:51 570首先明确一点出现此错误并不是代表代码错误。 在android ... -
Android开发之Failure [INSTALL_FAILED_OLDER_SDK]错误
2016-12-08 09:46 919[size=xx-small]起初我看到这个错误是拒绝 ...
相关推荐
本篇将详细解析标题和描述中提到的"android二维码扫描竖屏,横屏"的相关知识点,包括竖屏简化版和横屏Google源码的应用。 1. **二维码扫描原理** 二维码扫描主要依赖于二维码解码库,例如ZXing(Zebra Crossing)库...
【安卓条码扫描二维码相关-android实现竖屏二维码扫描】 在Android平台上,开发一款能够扫描二维码的应用是一项常见的任务。本项目“安卓条码扫描二维码相关-android实现竖屏二维码扫描.zip”提供了一个基本的实现...
在本文中,我们将深入探讨二维码扫描的工作原理、横屏与竖屏支持的实现方式,以及如何在应用程序中集成这一功能。 一、二维码工作原理 二维码,全称为“Quick Response Code”,即快速响应码,是一种二维条形码。它...
本教程将详细介绍如何在iOS应用中实现二维码的生成和扫描功能,主要涉及以下几个核心知识点: 1. **Core Image框架**:用于处理图像,包括扫描二维码。`CIDetector`类提供了检测图像中的特征,如二维码的能力。 2....
二维码识别-使用opencv在Android上开发的微信二维码识别项目源码+演示apk+详细使用说明.zip二维码识别-使用opencv在Android上开发的微信二维码识别项目源码+演示apk+详细使用说明.zip二维码识别-使用opencv在Android...
阐述如何实现竖屏扫描,以及与其他横屏扫描方案的比较。 通过这个项目,学生不仅可以学习到Android应用开发的基础知识,还能深入理解图像处理、权限管理、UI设计等方面的技术。同时,对于实际项目经验的积累和毕业...
【安卓条码扫描二维码相关-Zxing二维码扫描竖屏仿QQ扫一扫】 这个压缩包文件主要包含了一个基于Zxing库实现的二维码扫描项目,旨在模仿QQ应用的“扫一扫”功能,适用于竖屏模式。Zxing(ZXing,发音为 "zebra ...
在Android平台上实现一个竖屏二维码扫描的应用涉及到多个技术层面,包括UI设计、摄像头处理、图像识别和处理等。以下是对这个主题的详细说明: 一、Android应用基础 Android是Google主导的开源移动操作系统,用于...
【安卓条码扫描二维码相关-android二维码识别基本代码】 在安卓应用程序开发中,条码和二维码的扫描与识别是一项常见的功能,广泛应用于商品信息查询、支付链接跳转等场景。本资源提供了一些基本的代码实现,帮助...
在安卓平台上,条形码和二维码扫描是一种常见的功能,广泛应用于商品识别、信息获取、支付等领域。本资源“安卓条码扫描二维码相关-条形码二维码扫描.rar”包含的文件可能是一个开发示例或者库,用于帮助开发者实现...
【安卓条码扫描二维码相关-二维码扫描并加载到webview】 在移动开发中,二维码扫描是一种常见的功能,它能够快速地传递信息,如网址、文本、联系人信息等。安卓平台提供了多种方式来实现二维码扫描,并将其内容加载...
在移动应用开发中,支持横屏和竖屏模式的二维码扫描功能是用户体验的重要组成部分。 首先,我们来讨论二维码的基本原理。二维码,全称二维条形码,是一种用黑白相间的图形表示信息的编码方式。它比传统的条形码能...
在Android平台上实现竖屏二维码扫描是一项常见的任务,尤其在开发移动应用时,用户可能需要快速扫描二维码以获取信息或执行特定操作。这个压缩包提供的源码是一个完整的Android应用项目,旨在帮助开发者理解和实现这...
"Delphi二维码扫描.zip"这个文件很可能包含了一个使用Delphi开发的二维码扫描应用程序或者相关的源代码示例。下面我们将深入探讨与Delphi和二维码扫描相关的知识点。 1. **Delphi技术**: - **集成开发环境**:...
- **ViewfinderView**: 显示相机预览,并在扫描区域上绘制识别框,以引导用户正确对准条码或二维码。 - **DecodeThread**: 异步处理图像解码,避免阻塞UI主线程。 - **ResultHandler**: 处理解码结果,可以将扫描...
同时,也要处理扫描失败的情况,例如光线不足或者二维码无法识别。 7. **自定义扫描框**:为了提高用户体验,可以定制扫描框的样式,例如添加动画效果,使用户更容易定位到二维码。 8. **性能优化**:考虑到实时...
本资源“安卓条码扫描二维码相关-二维码扫描的实现.rar”包含了一个关于二维码扫描实现的项目,可能包括源代码、库文件和其他相关资料。由于文件数量众多,无法逐一验证其可用性,所以开发者需要自行调试以确保程序...
本Demo主要展示了如何利用zxing库实现一个支持横竖屏切换的二维码扫描功能。ZXing,全称Zebra Crossing,是一个开源的条码处理库,支持多种格式的条码和二维码扫描。 首先,我们需要在项目中集成zxing库。这里使用...
在安卓平台上,条码扫描和二维码的使用非常广泛,其中包括了微信二维码的制作与读取。这个压缩包文件“安卓条码扫描二维码相关-仿微信二维码制作二维码扫码读取名片信息.rar”似乎提供了一个实现类似微信功能的示例...
支持竖屏、平板和只有前置摄像头的android二维码扫描demo(修复后).zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。