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