Использование памяти для работы с изображениями

1

Я пишу приложение для манипулирования изображениями (например, операции включают размытие, поворот, масштабирование, слияние, заливку флуда), и я беспокоюсь об использовании памяти.

Проблема, с которой я столкнулась, заключается в том, что мне нужно использовать Bitmap + Canvas, чтобы я мог использовать существующие функции для управления изображениями, и мне также нужно поместить копии изображения в массивы int, чтобы изменить пиксели как он слишком медленный, чтобы изменять растровые изображения, используя функцию set/getPixel для некоторых операций, таких как размытие и заливка заливки.

Мое текущее использование памяти:

  • Объект Bitmap для самого изображения.
  • Внеэкранный объект Bitmap, который я использую для выполнения задач манипулирования изображениями с помощью Canvas.
  • Растровое изображение только для альфа-канала, используемое для маскировки.
  • Два внутренних массива, каждый из которых имеет достаточное количество пикселей, чтобы содержать копию основного изображения.

Например, я использую два массива int для выполнения операции заливки наводнения: я копирую основное изображение в один массив, помещаю полутоновую версию основного изображения в другой массив (где представление в градациях серого создается с помощью экрана Сначала битмап и холст), используйте изображение в оттенках серого, когда выполняете сравнение цветов, чтобы выполнить операцию заливки заливки в первом массиве, а затем скопируйте окончательное изображение обратно в основное изображение Bitmap. Возможно, я мог бы исключить внекадровое растровое изображение для этой операции, но, например, Я использую offscreen bitmap для выполнения операций рисования.

Есть ли какие-либо трюки, которые я могу использовать для сокращения использования памяти? Например, есть ли какие-либо быстрые способы изменения пикселей, которые не включают в себя создание массивов int массивов объектов Bitmap? Можно ли использовать объект Canvas для непосредственного изменения массива int?

Я хочу добавить функциональность слоев (т.е. основное изображение будет состоять из нескольких растровых изображений), но я уже теряю память.

  • 0
    Вы можете выполнить некоторые (все?) Из этих операций, используя матрицы и цветовые матрицы / цветовые фильтры. Это то, что я считаю довольно продвинутой темой, поэтому будьте готовы потратить дни / недели на то, как правильно ее использовать.
  • 0
    Не могли бы вы дать мне еще несколько советов? Я уже знаю о цветовых матрицах, и я не вижу, как они могли бы помочь здесь.
Теги:
image-processing
mobile

1 ответ

0
Лучший ответ

В зависимости от того, для чего вы используете ваши две массивы int, вы можете подумать о создании их байт-массивов. Опять же, в зависимости от того, что вы используете, вы можете хранить несколько битовых флагов в каждом байте, используя двоичные маски. И, в зависимости от того, как вы хотите, чтобы обнаружение границ работало, вы могли бы уменьшить бит на пиксель на изображении, которое вы используете для операции заливки потока. НТН

Ещё вопросы

Сообщество Overcoder
Наверх
Меню