Android: sacar una foto de la cámara frontal hace girar la foto
Estoy creando una aplicación en Android en la que el usuario podrá tomar una foto de la cámara frontal solo en modo retrato. He logrado fijar la vista de la cámara a retrato, pero cuando se toma una foto aparece girada. Lo peor es que la dirección de rotación es diferente en diferentes teléfonos, en un teléfono se gira a la derecha y en otro se gira a la izquierda.
Aquí están mis fragmentos de código
Para asegurarse de que la actividad juegue solo en retrato
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Para buscar la camara
@Override
public void onResume() {
super.onResume();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
Camera.CameraInfo info=new Camera.CameraInfo();
for (int i=0; i < Camera.getNumberOfCameras(); i++) {
Camera.getCameraInfo(i, info);
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
camera=Camera.open(i);
}
}
}
if (camera == null) {
camera=Camera.open();
}
}
Para girar la camara
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
if(previewing){
camera.stopPreview();
previewing = false;
}
if (camera != null){
try {
camera.setPreviewDisplay(surfaceHolder);
camera.setDisplayOrientation(90);
initPreview(width, height);
startPreview();
previewing = true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Foto tomada
PictureCallback myPictureCallback_JPG = new PictureCallback(){
@Override
public void onPictureTaken(byte[] data, Camera arg1) {
// new SavePhotoTask().execute(data);
Intent myIntent = new Intent(MainActivity.this, CropActivity.class);
Bitmap bitmap = BitmapFactory.decodeByteArray(data , 0, data .length);
myIntent.putExtra("image", bitmap);
MainActivity.this.startActivity(myIntent);
}};
El envío BMP siempre aparece en forma rotada, pero no siempre con 90 grados. Parece que Android 4.0 no solo gira sino que también voltea la imagen. ¿Hay una buena manera de detectar y asegurarse de que siempre obtenga la imagen correcta?