повышение скорости 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. когда дело доходит до того, что у вас очень мало помочь, но это действительно увеличивает скорость