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
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.
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!