拣选图像总是给出景观图像

时间:2012-06-27 05:51:03

标签: android file bitmap image-gallery

我使用以下代码从手机图库中选取图片:

Intent intent = new Intent();
  intent.setType("image/*");
  intent.setAction(Intent.ACTION_GET_CONTENT);
  startActivityForResult(Intent.createChooser(intent, "Select Picture"),
    USE_LIBRARY_PIC_REQUEST);

在onActivityResult()中,它提供了文件路径,我尝试使用filepath获取位图,但它总是在横向视图中提供它。有没有办法在纵向视图中获取该图像? 获取文件路径的代码:

Uri selectedImageUri = data.getData();
    selectedImagePath = getPath(selectedImageUri);

这就是我使用文件路径获取位图的方法:

Bitmap bmp=BitmapFactory.decodeFile(selectedImagePath);

1 个答案:

答案 0 :(得分:7)

要获得原始图像,您可以使用此方法。

public static Bitmap getBitmap(String uri, Context mContext) {

    Bitmap bitmap = null;
    Uri actualUri = Uri.parse(uri);
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inTempStorage = new byte[16 * 1024];
    options.inSampleSize = 2;
    ContentResolver cr = mContext.getContentResolver();
    float degree = 0;
    try {
        ExifInterface exif = new ExifInterface(actualUri.getPath());
        String exifOrientation = exif
                .getAttribute(ExifInterface.TAG_ORIENTATION);
        bitmap = BitmapFactory.decodeStream(cr.openInputStream(actualUri),
                null, options);
        if (bitmap != null) {
            degree = getDegree(exifOrientation);
            if (degree != 0)
                bitmap = createRotatedBitmap(bitmap, degree);
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return bitmap;
}

public static float getDegree(String exifOrientation) {
    float degree = 0;
    if (exifOrientation.equals("6"))
        degree = 90;
    else if (exifOrientation.equals("3"))
        degree = 180;
    else if (exifOrientation.equals("8"))
        degree = 270;
    return degree;
}

public static Bitmap createRotatedBitmap(Bitmap bm, float degree) {
    Bitmap bitmap = null;
    if (degree != 0) {
        Matrix matrix = new Matrix();
        matrix.preRotate(degree);
        bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(),
                bm.getHeight(), matrix, true);
    }

    return bitmap;
}