l'amélioration de la vitesse de la méthode getpixel() et setpixel() sur Android Bitmap

Tous,

Après j'ai remarqué comment ralentir getPixel et setPixel sont (pas sûr que l'on, suppose que les deux ne sont pas turbo) j'ai rapidement développé un conteneur pour Bitmap qui utilise int[] tableau pour gérer bitmap opérations.

Déjà ses sensiblement plus rapide, mais ce n'est pas suffisant. S'il vous plaît pourriez vous conseils sur la façon d'accélérer davantage?

Mon idée est de garder une trace de ce qui est fait "sale" par le setPixel fonctions et de mise à jour uniquement cette partie de Bitmap quand getBitmap() est appelé ... pas clair sur la façon de définir la setPixels paramètres (quelque chose avec l'offset et de la foulée je suppose).

Aussi - vite la recette?

Merci à tous pour aider à l'avance!

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();
}
}
J'espère que vous vous rendez compte que votre image bitmap prend 2X plus de mémoire, et aussi votre setpixel ne fonctionne pas. Ce tableau est juste une copie de la matrice de l'image dans l'image bitmap. Donc, en modifiant les valeurs dans des, ils ne reçoivent pas persisté jusqu'à ce que vous vous engager à la mémoire tampon de retour de l'objet bitmap.
Je comprends son deux fois plus de mémoire (d'une valeur de la vitesse dans mon utilisation) mais je suis perdu avec votre commentaire que le setpixel ne fonctionne pas - il fonctionne si je suis accédant à la bitmap par getBitmap méthode et c'est ce que je voulais.
assurez-vous que vous le commerce de la mémoire pour des performances qui fonctionne vraiment bien si vous avez à transformer chaque pixel sur une plus grande bitmap

OriginalL'auteur Piotr | 2011-01-17