2011-04-21 2 views
3

Bitmap.getPixels() renvoie un tableau d'entiers, avec des valeurs de pixel renvoyées dans un format "Packed Integer", décrit dans la documentation de Color.Quel est le format OpenGl de Bitmap.getPixels() dans Android?

Ce format est A, R, G, B.

Je veux passer ce tableau à GLES10.glTexImage2D(). J'ai essayé de spécifier à la fois internalFormat et format comme GL_RGBA. Mais cela provoque l'échange des canaux Bleu et Rouge.

Je n'ai pas trouvé d'équivalent Opengl qui décrit ce format.


En plus, je peux échanger les canaux R et B à l'aide des opérations au niveau du bit pour se conformer à GL_RGBA, mais préférerions si OpenGl pouvait reconnaître le format natif.


Mise à jour: Je sais que je peux utiliser le Bitmap directement avec TexImage2D(), mais je dois appeler getPixels() parce que je dois manipuler les données de pixels avant de l'utiliser comme une texture. Je peux convertir les pixels en bitmap, mais comme je l'ai dit, je préférerais utiliser les pixels directement comme texture.

Répondre

0

Vous n'avez pas besoin de récupérer les pixels, ni de traiter les formats de pixels sous-jacents, passez simplement l'objet Bitmap à l'utilitaire GLUtils.texImage2D().

par exemple:

Bitmap bitmap = BitmapFactory.decodeResource(...); 
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0); 
+0

Oui, cela fonctionne, et qui était mon code d'origine. Mais j'ai besoin de deux bitmaps dérivés de cette Bitmap, et ils fuyaient la mémoire (il y a un bug bien connu dans Android). Par conséquent, cette solution. – HRJ

+0

Je prends ça en arrière ... J'ai pu constater que les bitmaps ne fuyaient pas la mémoire. Les coupables étaient un couple de tampons directs que l'activité avait alloués et les retenait entre les redémarrages d'activité. Je les ai explicitement mis à null et tout va bien maintenant. Ma dernière solution utilise int [] data pour TexImage2D car c'est plus optimal dans mon cas. – HRJ

+0

Bien! Mais, je ne vois pas de variante texImage2D() qui accepte les données int [] .. Que voulez-vous dire? – olivierg

Questions connexes