Использование битмапа / холста и NDK - PullRequest
2 голосов
/ 26 января 2011

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

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

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

1 Ответ

4 голосов
/ 27 февраля 2011

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

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

My_native_render_code (MyDisplayBitmap);

Invalidate ();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...