Подтвердить что ты не робот

Android поворачивает изображения на 90 градусов (снимается камерой)

Я делаю снимок на своем устройстве Samsung Galaxy SII из кода. После сохранения и отображения его на экране я вижу, что он поворачивается на 90 градусов.

Я понял, что это какая-то проблема с устройством - это не происходит на всех устройствах.

Я делаю снимок с заданным намерением камеры и сохраняю его в функции onActivityResult.

Я огляделся, но не нашел твердого решения для этого.

Любые идеи о том, как найти проблему и повернуть ее обратно только на "проблемные" устройства?

4b9b3361

Ответ 1

Это ошибка, основанная на разных настройках производителей. Некоторые телефоны вращают их, некоторые - нет. см. ссылку, номер № 1193

http://code.google.com/p/android/issues/detail?id=1193

Ответ 2

Передайте путь к файлу, который будет снят с камеры

public Bitmap rotateBitmapOrientation(String photoFilePath) {

    // Create and configure BitmapFactory
    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);
    // Read EXIF Data
    ExifInterface exif = new ExifInterface(file);
    String orientString = exif.getAttribute(ExifInterface.TAG_ORIENTATION);
    int orientation = orientString != null ? Integer.parseInt(orientString) : ExifInterface.ORIENTATION_NORMAL;
    int rotationAngle = 0;
    if (orientation == ExifInterface.ORIENTATION_ROTATE_90) rotationAngle = 90;
    if (orientation == ExifInterface.ORIENTATION_ROTATE_180) rotationAngle = 180;
    if (orientation == ExifInterface.ORIENTATION_ROTATE_270) rotationAngle = 270;
    // Rotate Bitmap
    Matrix matrix = new Matrix();
    matrix.setRotate(rotationAngle, (float) bm.getWidth() / 2, (float) bm.getHeight() / 2);
    Bitmap rotatedBitmap = Bitmap.createBitmap(bm, 0, 0, bounds.outWidth, bounds.outHeight, matrix, true);
    // Return result
    return rotatedBitmap;
}

Ответ 3

Я предполагаю, что это может быть проблемой вашего датчика ориентации. Вы обрабатываете значение датчика в своей программе. Чтобы узнать, когда пользователь взял фотографию, устройство находилось в горизонтальной или вертикальной ориентации.