Я пишу приложение для манипулирования изображениями (например, операции включают размытие, поворот, масштабирование, слияние, заливку флуда), и я беспокоюсь об использовании памяти.
Проблема, с которой я столкнулась, заключается в том, что мне нужно использовать Bitmap + Canvas, чтобы я мог использовать существующие функции для управления изображениями, и мне также нужно поместить копии изображения в массивы int, чтобы изменить пиксели как он слишком медленный, чтобы изменять растровые изображения, используя функцию set/getPixel для некоторых операций, таких как размытие и заливка заливки.
Мое текущее использование памяти:
Например, я использую два массива int для выполнения операции заливки наводнения: я копирую основное изображение в один массив, помещаю полутоновую версию основного изображения в другой массив (где представление в градациях серого создается с помощью экрана Сначала битмап и холст), используйте изображение в оттенках серого, когда выполняете сравнение цветов, чтобы выполнить операцию заливки заливки в первом массиве, а затем скопируйте окончательное изображение обратно в основное изображение Bitmap. Возможно, я мог бы исключить внекадровое растровое изображение для этой операции, но, например, Я использую offscreen bitmap для выполнения операций рисования.
Есть ли какие-либо трюки, которые я могу использовать для сокращения использования памяти? Например, есть ли какие-либо быстрые способы изменения пикселей, которые не включают в себя создание массивов int массивов объектов Bitmap? Можно ли использовать объект Canvas для непосредственного изменения массива int?
Я хочу добавить функциональность слоев (т.е. основное изображение будет состоять из нескольких растровых изображений), но я уже теряю память.
В зависимости от того, для чего вы используете ваши две массивы int, вы можете подумать о создании их байт-массивов. Опять же, в зависимости от того, что вы используете, вы можете хранить несколько битовых флагов в каждом байте, используя двоичные маски. И, в зависимости от того, как вы хотите, чтобы обнаружение границ работало, вы могли бы уменьшить бит на пиксель на изображении, которое вы используете для операции заливки потока. НТН