Android, moyen le plus rapide pour dessiner un bitmap sur la toile
Me demandais ce que le moyen le plus rapide est de dessiner une image bitmap à la toile?
Actuellement, j'ai une image bitmap (et toile pour le dessin), que j'utilise à double tampon dessin appels, et puis quand je dessine sur la toile ont un effet de défilement par l'application d'un 1px toile de traduction. Cela seul permettra de réduire le framerate de 60 FPS à ~40, tout d'un coup. Je ne suis pas à l'aide de surfaceView (ou GLSurfaceView) pour le moment mais je me demandais si je manque quoi que ce soit qui permettrait d'améliorer la vitesse. onDraw() code ci-dessous
@Override
public void onDraw(Canvas canvas)
{
//update fps text
mFpsTracker.frameTouch();
if(mBufferedBitmap == null)
{
mBufferedBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_4444);
mBufferedCanvas = new Canvas(mBufferedBitmap);
}
paint.setColor(Color.BLUE);
mBufferedCanvas.drawLine(0, getHeight(), getWidth(), getHeight(), paint);
mBufferedCanvas.translate(0, -1);
canvas.drawBitmap(mBufferedBitmap, 0, 0, null);
//draw fps
mTextPaint.setColor(Color.WHITE);
canvas.drawText(mFpsTracker.getFPSString(), 40, 40, mTextPaint);
invalidate();
}
source d'informationauteur Dori
Vous devez vous connecter pour publier un commentaire.
veuillez voir cette blog par Romain Guy.
Une version vidéo est disponible ici.
Ne pas utiliser ARGB_4444 plus. Il est obsolète. Chaque pixel est allouée uniquement 4 bits par canal (d'où le nom). ARBG_8888 offre 16,777,216 couleurs au lieu de ARBG_4444 est de 4 096, mais utilise 4 octets par pixel au lieu de 2.
Dans le pain d'épices, Android fait ARGB_8888 le format standard pour Surface et l'augmentation attribution de mémoire par processus à cause de cela.
Il est plus efficace de définir votre De la fenêtre et (en supposant que vous êtes en utilisant simplifié SurfaceView) SurfaceHolder du format de RGBA_8888. Cela évite des changements de format qui sont sensiblement plus lent.
Autres conseils comprennent:
Sur un 2.1 de l'appareil, je suis en mesure de tirer à moins de 300 images sur l'écran à 50 fps.
J'ai eu le même problème que le vôtre, veuillez me dire si vous avez trouvé quelque chose de nouveau.
C'est ce que j'ai fondé jusqu'à présent:
Dans onSizeChange vous pouvez redimensionner ou de créer des images bitmap en fonction de la taille du canevas, puis l'image de dessin sera beaucoup plus rapide d'environ 60 im /s, cependant, l'utilisation de la vue personnalisée dans une boucle sans fin ralentit sur certains et devient nerveux sur certains appareils android donc je ne le recommande pas. Au lieu de cela, il est préférable d'utiliser SurfaceView.
Vérifier cet exemple: Comment puis-je utiliser le cadre de l'animation à l'intérieur de la toile?
U besoin de créer votre image bitmap quelque part ( exemple onCreate ou à un autre endroit (constructeur sera bon)) parce que quand u ne effet de défilement vous encore et encore créé de nouveaux bitmap. Donc, juste besoin de créer dans le constructeur et que l'utilisation de cette image.
c'est la bonne solution pour moi quand j'ai des problèmes similaires.
essayez créé ce
mBufferedBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_4444);
dans d'autres endroit où aucun invalider .j'espère que ça vous aidera.
Je pense que vous pouvez obtenir de bonnes performances à la sortie d'une toile.. mais il faut beaucoup de travail..
si vous commencez avec de bonnes performances graphiques de la bibliothèque, alors même si vous avez beaucoup de choses de mal, vous n'aurez probablement encore se retrouver avec de bonnes performances 🙂 lol
il y a une compétition de course pour le meilleur dessin de la bibliothèque... libgdx est actuellement gagner...
http://code.google.com/p/libgdx/wiki/SimpleApp#Project_Setup