ZXing改横屏识别为竖屏识别

参考文章:http://blog.sina.com.cn/s/blog_8d8425f301016s0v.html

                  http://www.eoeandroid.com/thread-293301-1-1.html

根据第一篇文章修改,确实把横屏修改为竖屏了。 但扫描时图形有变形。

根据第二篇文章修改,也把横屏修改为竖屏了,图形没有变形,但不扫描了。

结合两篇文章进行了一下修改,自己手机测试没有问题。

1.在DecodeHandler.java中,修改decode方法
  PlanarYUVLuminanceSource source = CameraManager.get().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 #11
    width = height;
    height = tmp;
    
    PlanarYUVLuminanceSource source = CameraManager.get().buildLuminanceSource(rotatedData, width, height);

2.在CameraManager.java中,注释代码:
            // 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;

3.在CameraConfigurationManager.java中,在setDesiredCameraParameters方法中添加一句
  camera.setDisplayOrientation(90);

4.在AndroidManifest.xml中,把Activity的属性android:screenOrientation="landscape"
改为
  android:screenOrientation="portrait"

 

5.在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);

 

这第5点就是为了解决第一篇文章,图形变形的问题。这样编译后就没有问题。

如果没有修改第四点,图片就会变反。(查看所有Android项目的AndroidManifest.xml文中对CaptureActivity的配置中所有screenOrientation都为portrait)

 

如果想把摄像头的取景框长宽设成一样(感觉取景框有点小的话),可以进行如下修改

把在CameraManager.java的getFramingRect方法中把

framingRect = new Rect(leftOffset, topOffset, leftOffset + width, topOffset + height);

替换成

framingRect = new Rect(leftOffset, topOffset, leftOffset + width, topOffset + width);



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值