/ / Android OutOfMemoryError при спробі повернути зображення - java, android, bitmap

Android OutOfMemoryError при спробі повернути зображення - 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), але коли я хочу, щоб повернути його я повинен забезпечити джерело растрового вже - як я можу його уникнути?

Дякую

Відповіді:

1 для відповіді № 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);

Надія, що допомагає.


0 для відповіді № 2

Якщо ви не робите ніяких божевільних речей, то ваш образ, мабуть, занадто великий.

Вам просто потрібно збільшити вашу купу. Додайте це до файлу маніфесту:

android:largeHeap="true"

0 для відповіді № 3

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

Можна повертати растрове зображення в місці використання. При малюванні растрового зображення використовуйте матрицю обертання, щоб вона була намальована з обертанням.

Інша справа, що ви, ймовірно, повинні переглянути вашу програму і спробувати звести до мінімуму використання пам'яті. Можливо, растрові зображення, які ви використовуєте, занадто великі, і ви повинні використовувати параметри з параметром inSampleSize, встановленим на 2 або більше.