If you are using API level >= 14, you can easily use a TextureView to mirror the preview image back to the original. for SurfaceView you can apply Matrix to a captured Bitmap in onPictureTaken method. private Camera.PictureCallback mPicture = new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { Camera.CameraInfo info = new Camera.CameraInfo(); Camera.getCameraInfo(cameraId, info); if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { Bitmap newImage = null; Bitmap cameraBitmap = null; if (data != null) { cameraBitmap = BitmapFactory.decodeByteArray(data, 0, (data != null) ? data.length : 0); } Matrix matrix = new Matrix(); matrix.preScale(1.0f, -1.0f); matrix.postRotate(270.f); newImage = Bitmap.createBitmap(cameraBitmap, 0, 0, cameraBitmap.getWidth(), cameraBitmap.getHeight(), matrix, true); ByteArrayOutputStream stream = new ByteArrayOutputStream(); newImage.compress(Bitmap.CompressFormat.JPEG, 100, stream); data = stream.toByteArray(); if (newImage != null) { newImage.recycle(); newImage = null; } if (cameraBitmap != null) { cameraBitmap.recycle(); cameraBitmap = null; } } } };