2012-01-25 4 views
0

Je suis en train de porter une application AS3 (Flash) vers Java Android. Et je besoin d'une fonction équivalente à ce prototype: copyPixels (sourceBitmapData: BitmapData, sourceRect: Rectangle, destPoint: Point, alphaBitmapData: BitmapData = null, alphaPoint: point = null, mergeAlpha: Boolean = false): voidJava bitmap composer comment

Le les paramètres importants sont SourceBitmap, SourceRect, DestPoint et MergeAlpha, je n'ai pas besoin des autres paramètres. En ce moment j'utilise la classe Bitmap en Java, est-il possible d'avoir une telle fonction avec la classe Bitmap qui est raisonnablement rapide pour surmonter les mauvaises performances Java Android? Peut-être que je devrais utiliser BufferedImage ou quelque chose d'autre mais je suis perdu parce que Java a beaucoup d'image/bitmap quelle classe qui effectue des tâches similaires alors que AS3 n'en a que 2. Je n'ai pas trouvé de code qui fait ce que je veux sans avoir recours à une forme de classe Canvas que je veux éviter en raison de problèmes de performance avec Java Android. Il existe une fonction CopyPixels dans la classe Bitmap, mais d'après ce que je comprends, elle ne contient pas de valeurs alpha composées. Je suis sûr qu'il y a quelque part un code qui fait ce que je fais et j'espère que je n'aurai pas à réinventer la roue.

Merci pour les réponses/commentaires.

Répondre

1

Vous devez utiliser la classe android.graphics.Bitmap. La toile Android est en réalité très efficace. C'est juste un wrapper qui vous permet de faire un dessin de base sur un bitmap. Si vous jetez un oeil à certains des exemples openGL, le dessin est généralement plus rapide en utilisant canvas que openGL en Java. Quels ont été les problèmes de performance? Peut-être que le SO peut aider à résoudre ces problèmes. De plus, vous pouvez le faire vous-même en parcourant les pixels de l'image bitmap et en mélangeant les couleurs vous-même. Ce n'est pas très difficile, mais vraiment la performance ne sera pas très différente de la classe Canvas.

+0

Je suis déjà en train d'utiliser android.graphics.Bitmap – user1169933

+0

Je crois fermement que Canvas est plus rapide qu'OpenGl mais l'utilisation de Canvas comme espace réservé pour les graphiques composites est lente. C'est parce que vous avez besoin de copier à la fois bitmap sur toile, puis les copier à nouveau en bitmap. La copie de bitmap en bitmap avec la composition alpha (travailler avec des tampons et non des pixels individuels) serait la meilleure solution si possible. Les problèmes de performances étaient ralentis, retards lorsque le Java GC fait son travail, scintillement sur l'écran etc ... Les types de problèmes que vous n'avez pas avec C++ lorsque vous poussez beaucoup de pixels. Merci pour le commentaire, il est utile de savoir que Canvas n'est pas un goulot d'étranglement. – user1169933

+0

Vous n'avez pas vraiment besoin de copier beaucoup. Utilisez le constructeur Canvas qui prend un bitmap ou appelez SetBitmap(). Ceux-ci ne devraient pas copier le bitmap. Il devrait juste muter les pixels bitmap. Que voulez-vous dire par copier les bitmaps? Pourquoi le GC prend-il trop de temps? Créez-vous et recyclez-vous des bitmaps à chaque image? – Samuel