voltear vertical una rotar para online libremente izquierda invertir imagen horizontal grados girar fotos espejo derecha como cambiar android android-imageview android-gallery

android - vertical - girar imagen en grados



Android: ¿Cómo detectar la orientación de la imagen(vertical u horizontal) elegida desde la galería al configurar una vista de imagen? (6)

Aquí hay una gran solución que encontré para esto:> https://stackoverflow.com/a/34241250/8033090

Solución de una línea:

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

o

Picasso.with(context).load("file:" + photoPath).into(imageView);

Esto autodetectará la rotación y colocará la imagen en la orientación correcta

Picasso es una biblioteca muy poderosa para el manejo de imágenes en su aplicación que incluye: Transformaciones de imagen complejas con uso mínimo de memoria. Puede tardar un segundo en cargarse, pero simplemente coloque algo de texto detrás de la vista de la imagen que dice "Cargando imagen" y cuando la imagen se carga, cubre el texto.

Estoy configurando una imagen en la vista de la imagen seleccionada de la galería (álbum de la cámara). Si la imagen seleccionada tiene una orientación apaisada, se muestra perfectamente, pero si la imagen está en modo retrato (es decir, se hizo clic en la imagen en modo retrato) muestra la imagen con una rotación de 90 grados. Ahora estoy tratando de averiguar la orientación justo antes de configurar la vista de la imagen, pero todas las imágenes dan la misma orientación y la misma altura de ancho. Aquí está mi código:

Uri selectedImage = intent.getData(); if (selectedImage != null) { Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage); int str = new ExifInterface(selectedImage.getPath()).getAttributeInt("Orientation", 1000); Toast.makeText(this, "value:" + str, Toast.LENGTH_LONG).show(); Toast.makeText(this, "width:" + bitmap.getWidth() + "height:" + bitmap.getHeight(), Toast.LENGTH_LONG).show();


Este trabajo para mí:

private String getOrientation(Uri uri){ BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; String orientation = "landscape"; try{ String image = new File(uri.getPath()).getAbsolutePath(); BitmapFactory.decodeFile(image, options); int imageHeight = options.outHeight; int imageWidth = options.outWidth; if (imageHeight > imageWidth){ orientation = "portrait"; } }catch (Exception e){ //Do nothing } return orientation; }


Esto también me funciona:

String[] orientationColumn = {MediaStore.Images.Media.ORIENTATION}; Cursor cur = getContentResolver().query(imageUri, orientationColumn, null, null, null); int orientation = -1; if (cur != null && cur.moveToFirst()) { orientation = cur.getInt(cur.getColumnIndex(orientationColumn[0])); } Matrix matrix = new Matrix(); matrix.postRotate(orientation);



Use ExifInterface para rotar la imagen. Use este método para obtener el valor correcto para rotar la imagen capturada de la cámara.

public int getCameraPhotoOrientation(Context context, Uri imageUri, String imagePath){ int rotate = 0; try { context.getContentResolver().notifyChange(imageUri, null); File imageFile = new File(imagePath); ExifInterface exif = new ExifInterface(imageFile.getAbsolutePath()); int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); switch (orientation) { case ExifInterface.ORIENTATION_ROTATE_270: rotate = 270; break; case ExifInterface.ORIENTATION_ROTATE_180: rotate = 180; break; case ExifInterface.ORIENTATION_ROTATE_90: rotate = 90; break; } Log.i("RotateImage", "Exif orientation: " + orientation); Log.i("RotateImage", "Rotate value: " + rotate); } catch (Exception e) { e.printStackTrace(); } return rotate; }

Y coloque este código en el método de resultado de actividad y obtenga valor para rotar la imagen ...

String selectedImage = data.getData(); String[] filePathColumn = {MediaStore.Images.Media.DATA}; Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); filePath = cursor.getString(columnIndex); cursor.close(); int rotateImage = getCameraPhotoOrientation(MyActivity.this, selectedImage, filePath);

Espero que esto ayude..


if(bm.getWidth() > bm.getHeight()) { Bitmap bMapRotate=null; Matrix mat=new Matrix(); mat.postRotate(90); bMapRotate = Bitmap.createBitmap(bm, 0, 0,bm.getWidth(),bm.getHeight(), mat, true); bm.recycle(); bm=null; imageDisplayView.setImageBitmap(bMapRotate); }else imageDisplayView.setImageBitmap(bm);