tomar para online movimiento imagenes imagen hacer grados fotos esfericas convertir como app android android-camera

android - para - fotos 360 grados en facebook



setRotation(90) para tomar una foto en modo vertical no funciona en dispositivos samsung (2)

De acuerdo con la documentación, setRotation(90) debería girar la imagen JPEG capturada ( takePicture en modo horizontal.

Esto funciona bien en un teléfono HTC, pero no funciona en Samsung Google Nexus S y Samsung Galaxy S3. ¿Es esto un error?

Sé que puedo usar la rotación de transformación de la matriz, pero me gustaría que el sistema operativo pueda hacer esto de manera más eficiente, y no quiero arriesgarme a rotar demasiado en algunos otros dispositivos.

editar

Configurando camera.setDisplayOrientation(90); hizo que la vista previa estuviera en modo vertical, sin embargo, no tuvo ningún efecto en la imagen tomada.

Además, además de setRotation , también he intentado establecer el tamaño de la imagen, donde cambio x con w : parameters.setPictureSize(1200, 1600); . Esto tampoco tuvo ningún efecto.

solución

Aparentemente, los teléfonos Samsung establecen la etiqueta de orientación EXIF, en lugar de rotar píxeles individuales. Como sugirió ariefbayu , leer el mapa de bits usando BitmapFactory no es compatible con esta etiqueta. Su código de muestra es la solución, y esta solución también es compatible con el uso de inSampleSize .


Intento responder esto en relación con la etiqueta Exif. Esto es lo que hice:

Bitmap realImage = BitmapFactory.decodeStream(stream); ExifInterface exif=new ExifInterface(getRealPathFromURI(imagePath)); Log.d("EXIF value", exif.getAttribute(ExifInterface.TAG_ORIENTATION)); if(exif.getAttribute(ExifInterface.TAG_ORIENTATION).equalsIgnoreCase("6")){ realImage=ImageUtil.rotate(realImage, 90); }else if(exif.getAttribute(ExifInterface.TAG_ORIENTATION).equalsIgnoreCase("8")){ realImage=ImageUtil.rotate(realImage, 270); }else if(exif.getAttribute(ExifInterface.TAG_ORIENTATION).equalsIgnoreCase("3")){ realImage=ImageUtil.rotate(realImage, 180); }

The ImageUtil.rotate() :

public static Bitmap rotate(Bitmap bitmap, int degree) { int w = bitmap.getWidth(); int h = bitmap.getHeight(); Matrix mtx = new Matrix(); mtx.postRotate(degree); return Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, true); }


Liso22, el flujo variable no hace la diferencia, simplemente conecte su mapa de bits, como sea que lo haya obtenido (decodeFile, etc.). Y si tiene problemas con ''ImageUtil.rotate (), simplemente escriba'' bitmap estático público rotate () ''como un método con los mismos parámetros y haga que'' imagen real ''sea igual a eso. De todos modos, esta solución no parece funcionar para mí, la etiqueta exif devuelve 1 (normal) ya sea en retrato o paisaje.