как установить ориентацию изображения камеры?

В моем приложении у меня есть функция загрузки изображений, она отлично работает со всеми изображениями, кроме изображения камеры, всякий раз, когда я просматриваю изображение камеры из галереи, а портретное изображение вращается в 90 gradleусов. Следующее – это мой код кода. Кто-нибудь может мне помочь? Я следовал за множеством учебных пособий, но все они хорошо работают в кикате … но когда один и тот же учебник не работает с ics, jellybean и т. Д.

public class MainActivity extends Activity { private Button browse; private String selectedImagePath=""; private ImageView img; private TextView messageText; private static int SELECT_PICTURE = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); img = (ImageView)findViewById(R.id.imagevw); browse=(Button)findViewById(R.id.browseimg); messageText = (TextView)findViewById(R.id.messageText); browse.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PICTURE); } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if (requestCode == SELECT_PICTURE) { Uri selectedImageUri = data.getData(); /*String filePath = getRealPathFromURI(getActivity(), selectedImageUri ); messageText.setText(filePath ); Picasso.with(getActivity()) .load(new File(filePath )) .centerCrop() .resize(60, 60).into( img);*/ selectedImagePath = getPath(selectedImageUri); messageText.setText(selectedImagePath); System.out.println(requestCode); System.out.println("Image Path : " + selectedImagePath); img.setImageURI(selectedImageUri); } } } @SuppressWarnings("deprecation") public String getPath(Uri uri) { String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor = managedQuery(uri, projection, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } } 

просто включите этот код

 public void rotateImage(String file) throws IOException{ BitmapFactory.Options bounds = new BitmapFactory.Options(); bounds.inJustDecodeBounds = true; BitmapFactory.decodeFile(file, bounds); BitmapFactory.Options opts = new BitmapFactory.Options(); Bitmap bm = BitmapFactory.decodeFile(file, opts); int rotationAngle = getCameraPhotoOrientation(getActivity(), Uri.fromFile(file1), file1.toString()); Matrix matrix = new Matrix(); matrix.postRotate(rotationAngle, (float) bm.getWidth() / 2, (float) bm.getHeight() / 2); Bitmap rotatedBitmap = Bitmap.createBitmap(bm, 0, 0, bounds.outWidth, bounds.outHeight, matrix, true); FileOutputStream fos=new FileOutputStream(file); rotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); fos.flush(); fos.close(); } public static 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_UNDEFINED); switch (orientation) { case ExifInterface.ORIENTATION_NORMAL: rotate = 0; case ExifInterface.ORIENTATION_ROTATE_270: rotate = 270; break; case ExifInterface.ORIENTATION_ROTATE_180: rotate = 180; break; case ExifInterface.ORIENTATION_ROTATE_90: rotate = 90; break; } } catch (Exception e) { e.printStackTrace(); } return rotate; } 

Существует несколько методов, но самый простой из них я нашел, используя библиотеку Picasso. Поскольку это загрузочный случай, мы получим правильную ориентацию, а также можем внести корректировку в размер растрового изображения.

  String filePath = getRealPathFromURI(getActivity(), selectedImageUri ); messageText.setText(filePath ); Picasso.with(getActivity()) .load(new File(filePath )) .centerCrop() .resize(60, 60).into( img); 

Я решил проблему поворота изображения со следующим кодом

 public Bitmap rotateImageIfRequired(String imagePath) { int degrees = 0; try { ExifInterface exif = new ExifInterface(imagePath); int orientation = exif.getAttributeInt( ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); switch (orientation) { case ExifInterface.ORIENTATION_ROTATE_90: degrees = 90; break; case ExifInterface.ORIENTATION_ROTATE_180: degrees = 180; break; case ExifInterface.ORIENTATION_ROTATE_270: degrees = 270; break; } } catch (IOException e) { Log.e("ImageError", "Error in reading Exif data of " + imagePath, e); } BitmapFactory.Options decodeBounds = new BitmapFactory.Options(); decodeBounds.inJustDecodeBounds = true; Bitmap bitmap = BitmapFactory.decodeFile(imagePath, decodeBounds); int numPixels = decodeBounds.outWidth * decodeBounds.outHeight; int maxPixels = 2048 * 1536; // requires 12 MB heap BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = (numPixels > maxPixels) ? 2 : 1; bitmap = BitmapFactory.decodeFile(imagePath, options); if (bitmap == null) { return null; } Matrix matrix = new Matrix(); matrix.setRotate(degrees); bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); return bitmap; } в public Bitmap rotateImageIfRequired(String imagePath) { int degrees = 0; try { ExifInterface exif = new ExifInterface(imagePath); int orientation = exif.getAttributeInt( ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); switch (orientation) { case ExifInterface.ORIENTATION_ROTATE_90: degrees = 90; break; case ExifInterface.ORIENTATION_ROTATE_180: degrees = 180; break; case ExifInterface.ORIENTATION_ROTATE_270: degrees = 270; break; } } catch (IOException e) { Log.e("ImageError", "Error in reading Exif data of " + imagePath, e); } BitmapFactory.Options decodeBounds = new BitmapFactory.Options(); decodeBounds.inJustDecodeBounds = true; Bitmap bitmap = BitmapFactory.decodeFile(imagePath, decodeBounds); int numPixels = decodeBounds.outWidth * decodeBounds.outHeight; int maxPixels = 2048 * 1536; // requires 12 MB heap BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = (numPixels > maxPixels) ? 2 : 1; bitmap = BitmapFactory.decodeFile(imagePath, options); if (bitmap == null) { return null; } Matrix matrix = new Matrix(); matrix.setRotate(degrees); bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); return bitmap; } 
  • Android-камера android.hardware.Camera устарела
  • Заставить камеру всегда открывать в портретном режиме в android
  • Прекратить сохранение фотографий с помощью встроенной камеры Android
  • Как захватить и сохранить изображение с помощью пользовательской камеры в Android?
  • Предварительный просмотр камеры для Android
  • Давайте будем гением компьютера.