读书人

Zxing2.1圆满竖屏扫描取景框不会变形

发布时间: 2013-07-16 22:38:05 作者: rapoo

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

读书人网 >编程

热点推荐