Zxing2.1完美竖屏扫描,取景框不会变形【转】

本文介绍了一种实现手机应用中竖屏扫描二维码的方法。通过修改manifest文件设置屏幕方向,并在DecodeHandler.java、CameraManager.java和CameraConfigurationManager.java等文件中进行代码调整,确保摄像头捕获画面正确旋转以匹配竖屏显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.修改manifest文件,将CaptureActivity设为portrait

android:screenOrientation="portrait"



2.在DecodeHandler.java文件中,找到decode(byte[],int,int)方法,在buildLuminanceSource调用前,加上如下:

          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;




3.在CameraManager.java中找到getFramingRectInPreview()方法, 替换相应代码

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里找到setDesiredCameraParameters()方法,在
camera.setParameters(parameters)之前加入

 camera.setDisplayOrientation(90);


5.这一步最关键了,之前有人说是去掉一部分代码,这样会导致扫描的东西变扁。正确的方法应该为:在CameraConfigurationManager.java里找到initFromCameraParameters(Camera camera)方法,改为

          Camera.Parameters parameters = camera.getParameters();
WindowManager manager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
if (width < height) {
int temp = width;
width = height;
height = temp;
}
screenResolution = new Point(height, width);
cameraResolution = findBestPreviewSizeValue(parameters, new Point(width, height));


把这个方法内容全部替换成以上代码就OK啦,大功告成!
转自 http://blog.youkuaiyun.com/bxs412/article/details/8616054
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值