Android开源二维码识别项目zxing横屏改为竖屏识别解决方案
来源:互联网 发布:音箱设计软件 编辑:程序博客网 时间:2024/05/21 08:40
在网上找了很多方法,但最后都有问题,自己调试了好几个小时,最后终于完美解决了竖屏识别。
首先你需要有zxing项目的简化版代码。
使用简化版可以免去许多不必要的代码,方便学习研究,更好定位核心功能。
如果你调试成功后,就可以着手修改将其变为竖屏识别了。
第1步:
在AndroidManifest中将CaptureActivity的screenOrientation属性做如下修改:
android:screenOrientation="portrait"第2步:
我们要把摄像头预览景调为竖向
CameraConfigurationManager类中的setDesiredCameraParameters()方法中添加如下代码:
// 使摄像头旋转90度setDisplayOrientation(camera, 90);
然后在CameraConfigurationManager类的最后添加setDisplayOrientation()方法:
/*改变照相机成像的方向的方法*/ 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(); } }
最后在CameraConfigurationManager中的initFromCameraParameters()方法的Log.d(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 = getCameraResolution(parameters, screenResolutionForCamera);
第3步:
CameranManager类中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步:
PlanarYUVLuminanceSource类中的getRow()方法为识别条形码部分,
getMatrix()方法为识别二维码部分
renderCroppedGreyscaleBitmap()方法为生成获取的码图部分
将getRow()中的:
int offset = (y + top) * dataWidth + left;getMatrix()中的:
int inputOffset = top * dataWidth + left;inputOffset += dataWidth;
renderCroppedGreyscaleBitmap()中的:
int inputOffset = top * dataWidth + left;inputOffset += dataWidth;
这些语句中dataWidth全部替换为dataHeight
同时将PlanarYUVLuminanceSource构造方法中:
if (left + width > dataWidth || top + height > dataHeight) { throw new IllegalArgumentException("Crop rectangle does not fit within image data."); }dataWidth与dateHeight中互换位置即可。
此时,你的程序竖屏识别码图应该没有任何问题了。至于取景框的样式,大家可以在自定义的ViewfinderView中修改成自己喜欢的样式。
- Android开源二维码识别项目zxing横屏改为竖屏识别解决方案
- Android开源二维码识别项目zxing横屏改为竖屏识别解决方案
- Android开源二维码识别项目zxing横屏改为竖屏识别解决方案
- Android开源二维码识别项目zxing横屏改为竖屏识别解决方案
- Android二维码识别 开源项目ZXing的编译
- Android二维码识别 开源项目ZXing的编译
- 利用开源ZXing项目实现条形码和二维码扫描识别 —— Android端
- zxing横屏改为竖屏识别,多次扫描,以及存在的摄像拉伸的问题
- zxing横屏改为竖屏识别,多次扫描,以及存在的摄像拉伸的问题
- Android ZXing改横屏识别为竖屏识别[转]
- python调用zxing项目进行二维码识别
- ZXing改横屏识别为竖屏识别
- ZXing改横屏识别为竖屏识别
- ZXing改横屏识别为竖屏识别
- ZXing改横屏识别为竖屏识别
- ZXing改横屏识别为竖屏识别
- ZXing改横屏识别为竖屏识别
- zxing二维码识别
- UI设计
- 【大话设计模式】——工厂三姐妹
- Cocos2dx-Android初体验
- 高校平台之题型题库——不再“死”不再动态
- Permutation Sequence
- Android开源二维码识别项目zxing横屏改为竖屏识别解决方案
- excel数据导入到DB中(一)
- 【矩阵】BZOJ 1875 || SDOI 2009 HH去散步
- Objective-C在ARC下结合GCD的单例模式和宏模版
- md5sum
- acm算法书籍收藏推荐
- 分析Cocos2d Android 项目的生成和运行
- iOS - 序列化与数据持久化
- C/C++ STL