2014-11-28 4 views
0

Я хочу, чтобы отобразить изображение на экране (у меня есть деятельность, которая отображает изображение):Android OutOfMemoryError при попытке повернуть изображение

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

Если вы не делаете никаких сумасшедших вещей в другом месте, то ваш образ, вероятно, слишком большой.

Вам просто нужно увеличить свою кучу. Добавьте это в файл манифеста:

android:largeHeap="true" 
+1

largeHeap - временное решение. Вы не можете действительно полагаться на этот флаг в производственных приложениях, потому что приложение с использованием excesive памяти будет уничтожено системой. – Zielony

0

Вы не можете повернуть растровое изображение на место, поскольку размеры могут быть разными. Я не знаю, почему невозможно загрузить уже повернутое растровое изображение.

Вы можете поворачивать растровое изображение в месте использования. При рисовании растрового изображения используйте матрицу вращения, чтобы нарисовать ее с вращением.

Другое дело, что вы, вероятно, должны просмотреть свое приложение и попытаться свести к минимуму использование памяти. Возможно, растровые изображения, которые вы используете, слишком велики, и вы должны использовать опции с параметром inSampleSize, равным 2 или более.

+0

Привет, У вас есть образец кода того, что я должен делать? благодаря – user1002065

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); 

Надежда, что помогает.

Смежные вопросы