Step 1: Add following lines to rotate data before buildLuminanceSource(..) in decode(byte[] data, int width, int height)
DecodeHandler.java:
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;PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(rotatedData, width, height);
Step 2: Modify getFramingRectInPreview().
CameraManager.java
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;
Step 3: Disable the check for Landscape Mode in initFromCameraParameters(…)
CameraConfigurationManager.java
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));
Step 4: Add following line to rotate camera insetDesiredCameraParameters(…)
CameraConfigurationManager.java
camera.setDisplayOrientation(90);
Step 5: Do not forget to set orientation of activity to portrait. I.e: manifest
,君子无故,玉不去身。