尝试旋转图像时出现Android OutOfMemoryError

时间:2014-11-28 21:20:38

标签: java android bitmap

我想在屏幕上显示图像(我有一个显示图像的活动):

Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
ExifInterface exif = new ExifInterface(imagePath);
int rotation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
int rotationInDegrees = exifToDegrees(rotation);
Matrix matrix = new Matrix();
matrix.preRotate(rotationInDegrees);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);

最后一行抛出java.lang.OutOfMemoryError

我不明白怎么做...我必须先创建位图(BitmapFactory.decodeFile)但是当我想要旋转它时我必须提供源位图 - 我该如何避免它?

由于

3 个答案:

答案 0 :(得分:1)

您可以先尝试通过在位图选项中添加 inSampleSize 来解码图像,然后再对其进行解码。如文件所述:http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize

  

如果设置为值> 1,请求解码器对原始图像进行二次采样,返回较小的图像以节省存储空间。

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 5;
Bitmap bitmap = BitmapFactory.decodeFile(imagePath, options);

希望有所帮助。

答案 1 :(得分:0)

如果你在其他地方做任何疯狂的事情那么你的形象可能太大了。

你只需要增加你的堆。将其添加到您的清单文件中:

android:largeHeap="true"

答案 2 :(得分:0)

您无法在适当位置旋转位图,因为尺寸可能不同。我不知道,为什么加载已旋转的位图是不可能的。

您可以在使用地点旋转位图。绘制位图时,使用旋转矩阵使其旋转绘制。

其他问题是您可能应该检查您的应用并尽量减少内存使用量。也许您使用的位图太大,您应该使用选项,并将inSampleSize设置为2或更多。