Zxing2.1完美竖屏扫描,取景框不会变形【转】
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.csdn.net/bxs412/article/details/8616054