повышение скорости getpixel () и setpixel () на растровом изображении Android

все,

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

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

моя идея состоит в том, чтобы отслеживать, что сделано "грязным"setPixel функции и обновление только этой части Bitmap когда getBitmap() называется ... не ясно, как установить setPixels параметры, хотя (что-то со смещением и шагом, я думаю).

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

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

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();
}
}

2 ответов


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

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

см. также проектирование для производительности в Android доктора.

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


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