android zxing 扫描条码,竖屏扫描

https://github.com/zxing
在上面的网址中下载最新的zxing 版本3.3.1加入到android项目中,我用的是小米pad3.默认是竖屏扫描,但是不能扫描一维码,刚开始以为是设置问题,在网上查了一下,发现在PAD上扫描框显示是竖屏,但是zxing处理扫描结果是按照横屏的。条码识别是按照横屏截取识别的。
这种情况下,只好修改zxing源代码了。

第一步:删除CaptureActivity.java中把onResume方法中的以下代码注释掉:

 //    if (prefs.getBoolean(PreferencesActivity.KEY_DISABLE_AUTO_ORIENTATION, true)) {
//      setRequestedOrientation(getCurrentOrientation());
//    } else {
//      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
//    }

第二步:在CaptureActivity.java中把onCreate方法结尾处添加以下代码:

    if (getResources().getConfiguration().orientation==Configuration.ORIENTATION_PORTRAIT) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        } else {
               setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
       }

第三步:修改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; 

第四步:修改DecodeHandler.java中的decode(byte[] data, int width, int height)方法:
找到下面的代码
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;  
width = height;  
height = tmp;  
data = rotatedData; 

其实主要是对相机的设置横屏还是竖屏,然后确定扫描框范围,然后截取扫描框范围内的图像。不过以后作者应该会很容易的解决这个问题,不知以后的新版本会不会直接解决这个问题。

下面这个博客写的比较详细可以参考一下
http://iluhcm.com/2016/01/08/scan-qr-code-and-recognize-it-from-picture-fastly-using-zxing/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值