Неправильная ориентация изображения. Как это исправить

#android #android-camera

#Android #android-камера

Вопрос:

Вот мой код

  takePicture.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ContentValues values = new ContentValues();
                values.put(MediaStore.Images.Media.TITLE, "MyPicture");
                values.put(MediaStore.Images.Media.DESCRIPTION, "Photo taken on "   System.currentTimeMillis());
                imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
                startActivityForResult(intent, 0);
            }
        });
  

@onActivityResult

  bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri);
 tempUri = getImageUri(getApplicationContext(), bitmap);
 s = getRealPathFromURI(tempUri);
 ByteArrayOutputStream baos = new ByteArrayOutputStream();
 bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
 image.setImageBitmap(bitmap);
  

Но это неправильная ориентация.
Я думаю, что изображение поворачивается при использовании EXTRA_OUTPUT . Но я не знаю, как это исправить. Используется ExifInterface . Однако ориентация всегда равна 0. Таким образом, путь зашел в тупик.

Прикрепленный файл

Камера

введите описание изображения здесь

Вывод

введите описание изображения здесь

Ответ №1:

Используйте эти 2 метода, чтобы получить растровое изображение в правильном повороте, вам просто нужно вызвать getPictureBitmap() метод:

 public Bitmap getPictureBitmap(String yourPathToPicture) throws IOException {
        Bitmap bitmap = BitmapFactory.decodeFile(currentPhotoPath);

        ExifInterface ei = new ExifInterface(yourPathToPicture);
        int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION,
                ExifInterface.ORIENTATION_UNDEFINED);

        Bitmap rotatedBitmap = null;
        switch(orientation) {

            case ExifInterface.ORIENTATION_ROTATE_90:
                rotatedBitmap = rotateImage(bitmap, 90);
                break;

            case ExifInterface.ORIENTATION_ROTATE_180:
                rotatedBitmap = rotateImage(bitmap, 180);
                break;

            case ExifInterface.ORIENTATION_ROTATE_270:
                rotatedBitmap = rotateImage(bitmap, 270);
                break;

            case ExifInterface.ORIENTATION_NORMAL:
            default:
                rotatedBitmap = bitmap;
        }

        return rotatedBitmap;
    }

    public static Bitmap rotateImage(Bitmap source, float angle) {
        Matrix matrix = new Matrix();
        matrix.postRotate(angle);
        return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(),
                matrix, true);
    }
  

Комментарии:

1. Добро пожаловать, у меня только что была такая же проблема в моем последнем проекте!