Недавно я обнаружил, что нет жесткого ограничения на объем памяти, который может выделять код NDK, в отличие от сильно ограниченного объема памяти (~ 25 МБ на большинстве устройств), который вы можете выделить на стороне Java.
Я хочу написать приложение для обработки изображений (что-то вроде Photoshop), которое должно хранить сразу несколько больших растровых изображений в памяти, где растровые данные занимают ~ 20 МБ памяти.Выполнение этого в Java делает приложение подверженным исключениям нехватки памяти на многих устройствах, которые я пробовал.
Весь мой текущий код использует классы Bitmap и Canvas для выполнения моих манипуляций с изображениями. Может кто-нибудь предложить какой-нибудь способ, который позволит мне выделить большую часть моей памяти на стороне C, и при этом использовать Bitmap + Canvas для выполнения моих операций рисования (с использованием Android 2.1 и выше)?* Например, если мое изображение состоит из 6 растровых слоев, а пользователь рисует на 3-м слое, мне нужно нарисовать растровое изображение капли краски на 3-м слое, а затем обновить экран, чтобы отобразить результат выравнивания всех слоев надруг на друга в режиме реального времени.Я рассмотрел что-то вроде выделения 6 моих растровых изображений в C как массивов int и выполнения операции рисования на стороне Java с помощью Canvas, используя копию редактируемого слоя, хранящуюся в объекте Bitmap.Я не уверен, как будет работать стадия сплющивания.