我想在屏幕上显示图像(我有一个显示图像的活动):
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)但是当我想要旋转它时我必须提供源位图 - 我该如何避免它?
由于
答案 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或更多。