недействительными ();
=====================

но я обнаружил, что нет жесткого ограничения на объем памяти, который может выделять код NDK, в отличие от сильно ограниченного объема памяти (~ 25 МБ на большинстве устройств), который вы можете выделить на стороне Java.

Я хочу написать приложение для обработки изображений (что-то вроде Photoshop), которое должно хранить сразу несколько больших растровых изображений в памяти, где данные растрового изображения занимают ~ 20 МБ памяти. Выполнение этого в Java делает приложение склонным к нехватке памяти на многих устройствах, которые я пробовал.

Весь мой текущий код использует классы Bitmap и Canvas для манипуляций с изображениями.**Может кто-нибудь предложить какой-нибудь способ, который позволит мне выделить большую часть моей памяти на стороне C и при этом использовать Bitmap + Canvas для выполнения операций рисования (с использованием Android 2.1 и выше)?**

Например, если мое изображение состоит из 6 растровых слоев, а пользователь рисует на 3-м слое, мне нужно нарисовать растровое изображение капли краски на 3-м слое, а затем обновить экран, чтобы отобразить результат выравнивания всех слоев сверху. друг друга в режиме реального времени. Я рассмотрел что-то вроде выделения 6 моих растровых изображений в C как массивов int и выполнения операции рисования на стороне Java с помощью Canvas, используя копию редактируемого слоя, хранящуюся в объекте Bitmap. Я не уверен, как будет работать стадия выравнивания.

зображение в Java и манипулирует битами в собственном коде. Один из возможных методов заключается в том, что вы можете выделить большие блоки памяти и хранить изображения в собственном коде и просто визуализировать «представление» в битовый массив, созданный Java. Метод визуализации вида и «выравнивания» слоев изображения, вероятно, должен выполняться в собственном коде. Что-то вроде:

... пользователь изменил слой ...

My\_native\_render\_code (MyDisplayBitmap);

недействительными ();