Android Front Facing Camera Taking Inverted Photos

前端 未结 2 810
我寻月下人不归
我寻月下人不归 2021-02-07 05:16

I have this app that is running in portrait mode and as a part of one activity I have a camera object running as a fragment in it.

I have the option to switch from front

相关标签:
2条回答
  • 2021-02-07 05:56

    Well well. It seems I have kind of taken care of it. I used the advice from this: Android, front and back camera Orientation , Landscape

    And changed my MakeSquare function to this:

    public static Bitmap MakeSquare(byte[] data, int cameraID) {
        int width;
        int height;
        Matrix matrix = new Matrix();
        Camera.CameraInfo info = new Camera.CameraInfo();
        android.hardware.Camera.getCameraInfo(cameraID, info);
        // Convert ByteArray to Bitmap
        Bitmap bitPic = BitmapFactory.decodeByteArray(data, 0, data.length);
        width = bitPic.getWidth();
        height = bitPic.getHeight();
    
        // Perform matrix rotations/mirrors depending on camera that took the photo
        if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT)
        {
            float[] mirrorY = { -1, 0, 0, 0, 1, 0, 0, 0, 1};
            Matrix matrixMirrorY = new Matrix();
            matrixMirrorY.setValues(mirrorY);
    
            matrix.postConcat(matrixMirrorY);
        }
    
        matrix.postRotate(90);
    
    
        // Create new Bitmap out of the old one
        Bitmap bitPicFinal = Bitmap.createBitmap(bitPic, 0, 0, width, height,matrix, true);
        bitPic.recycle();
        int desWidth;
        int desHeight;
        desWidth = bitPicFinal.getWidth();
        desHeight = desWidth;
        Bitmap croppedBitmap = Bitmap.createBitmap(bitPicFinal, 0,bitPicFinal.getHeight() / 2 - bitPicFinal.getWidth() / 2,desWidth, desHeight);
        croppedBitmap = Bitmap.createScaledBitmap(croppedBitmap, 528, 528, true);
        return croppedBitmap;
    }
    

    This seems to work and do the trick. Although I am not sure this was the best way, I am content with it. Now all I have to do is figure out why its not taking in the proper aspect ratio when using the front camera.

    0 讨论(0)
  • 2021-02-07 06:02

    Give these links a try:

    http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)

    http://developer.android.com/reference/android/hardware/Camera.Parameters.html#setRotation(int)

    Specifically, here is a chunk of verbiage from the setRotation link.

    "If applications want to rotate the picture to match the orientation of what users see, apps should use OrientationEventListener and Camera.CameraInfo. The value from OrientationEventListener is relative to the natural orientation of the device. CameraInfo.orientation is the angle between camera orientation and natural device orientation. The sum of the two is the rotation angle for back-facing camera. The difference of the two is the rotation angle for front-facing camera. Note that the JPEG pictures of front-facing cameras are not mirrored as in preview display."

    I used this code as-is, didn't modify it at all. My camera is better now, still needs some TLC though. I also don't have front-facing functionality yet.

    Good luck!

    0 讨论(0)
提交回复
热议问题