有没有办法旋转图像而不加载到Android中的内存?

时间:2016-06-08 07:24:13

标签: android rotation out-of-memory

有没有办法阅读方向并根据需要旋转?

我希望用户通过相机拍照。 之后,我检查方向是否是纵向。如果没有,请旋转图像并将其保存在内部存储器中以备将来使用。 (我必须将其存储在内部存储中,以便用户删除图库中的图像。)

所以这是旋转图像的方法:

int orientation = 0;
try {
    ExifInterface exif = new ExifInterface(mCurrentPhotoPath);
    orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,ExifInterface.ORIENTATION_NORMAL);
} catch (IOException e) {
    e.printStackTrace();
}

Matrix matrix = new Matrix();
matrix.postRotate(orientation);
Bitmap decodeFile = BitmapFactory.decodeFile(mCurrentPhotoPath);
Bitmap rotatedBitmap = Bitmap.createBitmap(decodeFile,0,0,decodeFile.getWidth(),decodeFile.getHeight(),matrix,true);
FileOutputStream out = null;

File pictureDir = new File(getFilesDir() + "/images/");
randomUUID = UUID.randomUUID().toString();
File file = new File(pictureDir.getAbsolutePath(), randomUUID + ".jpg");


try {
    imagePath = file.getAbsolutePath();
    out = new FileOutputStream(file);

    rotatedBitmap.compress(Bitmap.CompressFormat.JPEG,100,out);
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        if (out != null) {
            out.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

在第Bitmap decodeFile = BitmapFactory.decodeFile(mCurrentPhotoPath)行,我在旧设备上获得了一个OOM。 我尝试使用BitmapFactory.OptionsinJustDecodeBounds=true,但rotatedImage为空。

那么如何在将图像保存到内部存储空间的同时只读取方向并旋转图像?

我在stackoverflow中读过很多帖子,但没有一个帖子有相同的情况。

是否可以不将其加载到内存中?

感谢您的帮助!

亲切的问候, raymondis

0 个答案:

没有答案