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();
}
}
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
Vous devez vous connecter pour publier un commentaire.
Pour des fonctions aussi simples que
setPixel
/getPixel
, l'appel de la fonction de surcharge est relativement grand.Il serait beaucoup plus rapide pour accéder à la
pixels
tableau directement au lieu de passer par ces fonctions. Bien sûr, cela signifie que vous avez à fairepixels
public, ce qui n'est pas très agréable à partir d'une conception de point de vue, mais si vous avez absolument besoin de toutes les performances que vous pouvez obtenir, c'est le chemin à parcourir.Voir aussi La conception de la performance dans l'Android docs.
Si ce n'est pas encore assez, envisager de coder votre bitmap opérations en C++ à l'aide de la NDK.
OriginalL'auteur svdree
une autre alternative est l'utilisation de l'android ndk. quand il s'agit de ce que vous avez très peu d'aide, mais il augmente la vitesse
OriginalL'auteur burakcoskun