У меня есть растровое изображение размером 1000x1500 пикселей, из которого я хочу сделать изменяемую копию в Android.
Когда я запускаю следующий код...
// int width = original.getWidth(); // 1000px
// int height = original.getHeight(); // 1500px
final Bitmap result = original.copy(original.getConfig(), true);
original.recycle();
... Я получаю OutOfMemoryError
в строке copy
:
java.lang.OutOfMemoryError: bitmap size exceeds VM budget
ERROR/GraphicsJNI(419): VM won't let us allocate 6000000 bytes
Почему для инструкции копирования требуется 6 МБ (!) для растрового изображения размером 1000x1500 пикселей?
Как я могу создать изменяемое растровое изображение из неизменяемого более эффективным с точки зрения памяти способом?
Редактировать
BitmapFactory возвращает неизменяемые растровые изображения. По-видимому, единственный способ создать изменяемое растровое изображение из неизменного — это скопировать его в новое изменяемое растровое изображение. В случае растрового изображения 1000 x 1500 для этого, очевидно, требуется 12 МБ (1000 x 1500 x 4 x 2), что вызывает ошибку OutOfMemoryError на большинстве устройств Android.
Значит ли это, что эта проблема неразрешима в Android?