@Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Log.d(TAG, "surfaceChanged"); if (mHolder.getSurface() == null) { Log.e(TAG, "Error: preview surface does not exist"); return; } // preview_width = width; // preview_height = height; mPreviewWidth = mCameraManager.getPreviewSize().x; mPreviewHeight = mCameraManager.getPreviewSize().y; mCameraManager.stopPreview(); mCameraManager.getCamera().setPreviewCallback(this); mCameraManager.getCamera().setDisplayOrientation(90); // Portrait mode mCameraManager.startPreview(); }
/** * Transform result to surfaceView coordinates * * <p>This method is needed because coordinates are given in landscape camera coordinates. Now is * working but transform operations aren't very explained * * <p>TODO re-write this method explaining each single value * * @return a new PointF array with transformed points */ private PointF[] transformToViewCoordinates(ResultPoint[] resultPoints) { PointF[] transformedPoints = new PointF[resultPoints.length]; int index = 0; if (resultPoints != null) { float previewX = mCameraManager.getPreviewSize().x; float previewY = mCameraManager.getPreviewSize().y; float scaleX = this.getWidth() / previewY; float scaleY = this.getHeight() / previewX; for (ResultPoint point : resultPoints) { PointF tmppoint = new PointF((previewY - point.getY()) * scaleX, point.getX() * scaleY); transformedPoints[index] = tmppoint; index++; } } return transformedPoints; }