0

電話のURIから画像を表示したい画像ビューがあります

写真のビットマップを、取り込まれた向きに合わせて回転させたいのですが、常に同じ向きで写真を表示することはできません。

これは私の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 フィールドの取得を使用して指定されます。

4

1 に答える 1

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

次に、コードでこの Degree を使用して Rotation を変更します

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); 
于 2013-11-09T10:57:32.950 に答える