2012-01-14 5 views
12

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

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

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

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

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

ответ

8

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

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

+0

Итак, насколько я вижу - я должен запросить ландшафтный режим с камеры? Есть ли способ узнать каким-то образом, если устройство, на котором работает приложение, ратифицирует его? или я должен заставить все устройства использовать ландшафтный режим и блокировать портрет (который не является хорошим решением) – user1136875

+1

Я сам не понял эту часть. Я лично попробую http://developer.android.com/guide/topics/media/camera.html#custom-camera и посмотреть, не изменилось ли это. –

+0

Если вы это выясните - дайте мне знать :) – user1136875

-2

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

+2

Не можете полагаться на него - так как он хорошо работает на некоторых устройствах, а не на других – user1136875

4

Пройди путь к файлу, который захватывается из камеры

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; 
}