Android开源二维码识别项目zxing横屏改为竖屏识别解决方案

发布时间:2026/7/30 1:18:55
Android开源二维码识别项目zxing横屏改为竖屏识别解决方案 ​​​​​​在网上找了很多方法但最后都有问题自己调试了好几个小时最后终于完美解决了竖屏识别。首先你需要有zxing项目的简化版代码在这里。使用简化版可以免去许多不必要的代码方便学习研究更好定位核心功能。如果你调试成功后就可以着手修改将其变为竖屏识别了。第1步在AndroidManifest中将CaptureActivity的screenOrientation属性做如下修改android:screenOrientationportrait第2步我们要把摄像头预览景调为竖向CameraConfigurationManager类中的setDesiredCameraParameters()方法中添加如下代码// 使摄像头旋转90度 setDisplayOrientation(camera, 90);然后在CameraConfigurationManager类的最后添加setDisplayOrientation()方法:View Code最后在CameraConfigurationManager中的initFromCameraParameters()方法的Log.d(TAG, Screen resolution: screenResolution);句后面添加如下代码这段代码是为了解决摄像头竖过来后图像拉伸的问题View Code第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中修改成自己喜欢的样式。