Улучшение скорости getpixel () и setpixel () на Android Bitmap

Все,

После того, как я заметил, как медленные getPixel и setPixel (не уверен, какой из них, угадайте, оба не имеют турбонаддува), я быстро закодировал контейнер для Bitmap который использует массив int[] для обработки битмап-операций.

Уже – его заметно быстрее, но этого недостаточно. Пожалуйста, вы могли бы посоветовать, как ускорить его?

Моя идея – следить за тем, что стало «грязным» функциями setPixel и обновлять только эту часть Bitmap когда getBitmap() … непонятно, как установить параметры setPixels (что-то со смещением и шагом I Угадай).

Также – любой более быстрый рецепт?

Спасибо за любую помощь заранее!

 import android.graphics.Bitmap; public class DrawableBitmapContainer { private Bitmap image; private int width, height; private int[] pixels; public DrawableBitmapContainer(Bitmap _source ){ image = _source; width = image.getWidth(); height = image.getHeight(); pixels = new int[width*height]; image.getPixels(pixels,0,width,0,0,width,height); } public int getPixel(int x,int y){ return pixels[x+y*width]; } public void setPixel(int x,int y, int color){ pixels[x+y*width]=color; } public Bitmap getBimap(){ image.setPixels(pixels,0,width,0,0,width,height); return image; } public int getWidth(){ return image.getWidth(); } public int getHeight(){ return image.getHeight(); } } 

Для таких простых функций, как setPixel / getPixel , служебные данные вызова функции относительно велики.

Было бы намного быстрее получить доступ к массиву pixels напрямую, а не через эти функции. Конечно, это означает, что вы должны сделать pixels общедоступными, что не очень приятно с точки зрения дизайна, но если вам абсолютно нужна вся производительность, которую вы можете получить, это путь.

См. Также « Разработка для работы в документах Android».

Если этого все еще недостаточно, подумайте о кодировании ваших растровых операций на C ++ с помощью NDK .

Другой альтернативой является использование android ndk. Когда дело доходит до того, что у вас очень мало помощи, но это действительно увеличивает скорость

Intereting Posts
Как создать экран заставки / Запуск экрана, который исчезает после загрузки приложения? (Реагировать родной) Является ли IntentService реализацией Command Pattern? Определить тип данных столбца в SQLite Вызов супер в конце Есть ли способ рисовать заполненную область с помощью Canvas без использования Path? Реализация чата между веб-страницей и андроидом Ошибка: выполнение выполнено для задачи ': app: dexDebug'. Закончил с ненулевым значением выхода 2 с Facebook Fresco Ожидание сенсорного ввода без блокировки игрового потока Пользовательская задача Gradle для сохранения обработанного Json файла. Android Как добавить элемент в ArrayAdapter Spinner's? Visual Studio не может отлаживать приложение Android Xamarin Изменение размера предварительного просмотра камеры Запись wav-файла с микрофона в Android – проблемы Эффект Android L не работает Eclipse Android SDK – ошибка в рабочей области здания