选择后,图像方向会发生变化

时间:2014-06-16 11:26:23

标签: android android-intent background-image

我想使用Intent.ACTION_GET_CONTENT为视图设置背景图像,并将onActivityResult方法处理为......

public void onActivityResult(int requestCode, int resultCode, Intent data) {    
    if (resultCode == RESULT_OK && requestCode == SELECT_PICTURE) {
        Uri selectedImageUri = data.getData();        
        try {
            InputStream inputStream = 
               getContentResolver().openInputStream(selectedImageUri);
            Drawable drawable = Drawable.createFromStream(inputStream,     
               selectedImageUri.toString());
            mView.setBackground(drawable);
        } catch(FileNotFoundException e) {}
    }
}

它适用于一些来自gallary但不适用于所有图像的图像。选择一些图像后,图像方向会发生变化。

1 个答案:

答案 0 :(得分:4)

尝试以下代码: -

try {
        File f = new File(imagePath);
        ExifInterface exif = new ExifInterface(f.getPath());
        int orientation = exif.getAttributeInt(
                ExifInterface.TAG_ORIENTATION,
                ExifInterface.ORIENTATION_NORMAL);

        int angle = 0;

        if (orientation == ExifInterface.ORIENTATION_ROTATE_90) {
            angle = 90;
        } else if (orientation == ExifInterface.ORIENTATION_ROTATE_180) {
            angle = 180;
        } else if (orientation == ExifInterface.ORIENTATION_ROTATE_270) {
            angle = 270;
        }

        Matrix mat = new Matrix();
        mat.postRotate(angle);
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inSampleSize = 2;

        Bitmap bmp = BitmapFactory.decodeStream(new FileInputStream(f),
                null, options);
        bitmap = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(),
                bmp.getHeight(), mat, true);
        ByteArrayOutputStream outstudentstreamOutputStream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, 100,
                outstudentstreamOutputStream);
        imageView.setImageBitmap(bitmap);

    } catch (IOException e) {
        Log.w("TAG", "-- Error in setting image");
    } catch (OutOfMemoryError oom) {
        Log.w("TAG", "-- OOM Error in setting image");
    }