2013-11-09 2 views
0

У меня есть вид изображения, в котором я хотел бы показать картинку из URI в телефонеAndroid Matrix postRotation не работает

Я хочу, чтобы повернуть Bitmap моего изображения в соответствии с ориентацией оно было принято в - но он не работает, всегда показывайте картинку с той же ориентацией.

Это мой ImageView:

<!-- picture imageView --> 

<ImageView 
    android:id="@+id/fragment_new_picture_imageview_picture" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:contentDescription="@string/app_name" 
    android:scaleType="fitXY" /> 

Это моя матричная функция:

/** 
* Get the new picture {@link Bitmap} according to picture's right orientation 
* @return the picture's {@link Bitmap} 
*/ 
public Bitmap getPictureBitmap() 
{ 
    //if there is a saved instance - return it 
    if (pictureBitmap != null) 
     return pictureBitmap; 
    //decode bitmap 
    Bitmap bitmap = BitmapFactory.decodeFile(path); 
    //rotate bitmap 
    Matrix matrix = new Matrix();    
    matrix.postRotate(orientation); 
    //create new rotated bitmap 
    bitmap = Bitmap.createBitmap(bitmap, 0, 0,bitmap.getWidth(), bitmap.getHeight(), matrix, true);  
    return bitmap;  
} 

И это, как моя активность упоминается в манифесте:

<activity 
    android:name="com.coapps.pico.background.BackgroundActivity" 
    android:screenOrientation="portrait" 
    android:theme="@style/MainActivityTheme" > 
</activity> 

ориентации задаются с помощью запросов к Media.EXTERNAL_CONTENT_URI и получить поле Media_ORIENTATION

+0

Где и как устанавливается «ориентация»? Какое значение оно имеет, когда вы вызываете 'postRotate()'? – Simon

+0

просто используйте scaleType = "matrix" для вас ImageView – pskink

+0

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

ответ

0

Сначала получит степени из Ориентации

public static int getExifOrientation(String filepath) { 
       int degree = 0; 
       ExifInterface exif = null; 
       try { 
         exif = new ExifInterface(filepath); 
       } catch (IOException ex) { 
         ex.printStackTrace(); 
       } 
       if (exif != null) { 
         int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1); 
         if (orientation != -1) { 
           // We only recognise a subset of orientation tag values. 
           switch (orientation) { 
           case ExifInterface.ORIENTATION_ROTATE_90: 
             degree = 90; 
             break; 
           case ExifInterface.ORIENTATION_ROTATE_180: 
             degree = 180; 
             break; 
           case ExifInterface.ORIENTATION_ROTATE_270: 
             degree = 270; 
             break; 
           } 

         } 
       } 

       return degree; 
     } 

Затем использовать эту степень в своем коде, чтобы изменить вращение

Matrix matrix = new Matrix();    
    matrix.postRotate(orientation);// get from getExifOrientation() 
    //create new rotated bitmap 
    bitmap = Bitmap.createBitmap(bitmap, 0, 0,bitmap.getWidth(), bitmap.getHeight(), matrix, true); 
+2

не создавайте новый битмап, используйте scaleType = "matrix" для ImageView – pskink

+0

, возможно, я не был чист значение ориентации задано .. Я запрашиваю Media.EXTERNAL_CONTENT_URI, чтобы получить Media.ORIENTATION, и он имеет значение ... независимо от того, какое значение я вставляю - он не работает –