trasera selfies selfie sacarse recuperar puede por frontal desactivar defecto como celular cambiar camara android camera orientation nexus-s

selfies - Problema de orientación de la imagen capturada de la cámara delantera y trasera de Android, girada de manera incorrecta



se puede cambiar la camara frontal de un celular (5)

Estoy usando el siguiente código para esto:

ExifInterface exif = new ExifInterface(getUriPath(uri)); int orientation = exif.getAttributeInt( ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);

getUriPath:

public String getUriPath(Uri uri) { String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(uri, projection, null, null, null); if (cursor != null) { int column_index = cursor.getColumnIndexOrThrow(projection[0]); cursor.moveToFirst(); String filePath = cursor.getString(column_index); cursor.close(); return filePath; } else return null; }

Tengo una aplicación de cámara en modo retrato que toma imágenes de las cámaras delantera y trasera. El problema es que las imágenes capturadas se giran de forma incorrecta ...

Para la vista previa he utilizado el siguiente código ...

Camera.Parameters parameters = camera.getParameters(); android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo(); android.hardware.Camera.getCameraInfo(defaultCameraId, info); int rotation = this.getWindowManager().getDefaultDisplay() .getRotation(); if (Integer.parseInt(Build.VERSION.SDK) >= 8) { int degrees = 0; switch (rotation) { case Surface.ROTATION_0: degrees = 0; break; case Surface.ROTATION_90: degrees = 90; break; case Surface.ROTATION_180: degrees = 180; break; case Surface.ROTATION_270: degrees = 270; break; } int result; if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { result = (info.orientation + degrees) % 360; result = (360 - result) % 360; // compensate the mirror } else { // back-facing result = (info.orientation - degrees + 360) % 360; } camera.setDisplayOrientation(result); } else { parameters.set("orientation", "portrait"); } camera.setParameters(parameters);

Pero las imágenes capturadas se rotan de manera incorrecta. También he intentado rotar la imagen capturada usando matrix.postRotate(bitmap) Eso tampoco funciona en algunos dispositivos como nexus ... Intenté EXIF ​​también. Pero aquí tengo url en lugar de filepath. Eso no funciona tan bien. Alguien puede ayudarme ?


La respuesta seleccionada solo proporciona la posible rotación que se pudo haber guardado en el encabezado EXIF. en varios casos, la cámara no establece el atributo "ExifInterface.TAG_ORIENTATION" en EXIFHeader, por lo que será 0 (ExifInterface.ORIENTATION_UNDEFINED). y el evento, si está configurado, será cierto solo en un caso / orientación cuando se tome la fotografía. tienes que configurar manualmente la rotación en los parámetros de la cámara usando el método setRotation (). La documentación de setRotation () es muy clara y también explica cómo calcular la rotación teniendo en cuenta la rotación del dispositivo y la orientación del sensor de la cámara (generalmente en posición horizontal).

así que echa un vistazo al método setRotation () eso es lo que necesitas cambiar.


Puede consultar el siguiente código.

ExifInterface exif = new ExifInterface(SourceFileName); //Since API Level 5 String exifOrientation = exif.getAttribute(ExifInterface.TAG_ORIENTATION);

Y también consulte este enlace https://.com/a/6124375/1441666


Puedes usar esto para obtener orientación de un Uri

String filePath = mImageUri.getPath(); if (filePath != null) { rotation = -1; ExifInterface exif = new ExifInterface(filePath); // Since // API // Level // 5 rotation = Integer.parseInt(exif.getAttribute(ExifInterface.TAG_ORIENTATION)); // //Log.v("roation", // exif.getAttribute(ExifInterface.TAG_ORIENTATION)); } } } catch (Exception e) { Toast.makeText(getApplicationContext(), "Internal error", Toast.LENGTH_LONG).show(); Log.e(e.getClass().getName(), e.getMessage(), e); }

Y como la rotación de notas ''3 = 180, 6 = 90, 8 = 270''


prueba este fragmento de código

try { ExifInterface exif = new ExifInterface(filePath); orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1); //Toast.makeText(getApplicationContext(), ""+orientation, 1).show(); Log.v("log", "ort is "+orientation); } catch (IOException e) { e.printStackTrace(); }

y luego gire la matriz según la orientación que obtenga

if (orientation==6) { Matrix matrix = new Matrix(); matrix.postRotate(90); bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true); } else if (orientation==8) { Matrix matrix = new Matrix(); matrix.postRotate(270); bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true); } else if (orientation==3) { Matrix matrix = new Matrix(); matrix.postRotate(180); bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true; }