2011-02-15 2 views
1

Je développe actuellement une application de réalité augmentée dans android. L'objet openGL texturé est dessiné sur la vue de la caméra. J'avais essayé tant de méthodes pour prendre la capture d'écran de la vue android openGL (GLSurfaceview). Mais pas de succès. Je veux la capture d'écran avec un fond transparent afin que je puisse dessiner sur l'image de la caméra pour produire un ARImage. Quelqu'un peut-il m'aider? Je sais que je dois lire les pixels de opengl en utilisant la fonction glReadPixels(). Je l'ai essayé en utilisant le mode GL_RGBA et créé bitmap (utilisé ARGB_8888 et RGB_565). En utilisant le format ARGB_8888, j'obtiendrai une image transparente sans objet et en mode RGB_565 j'obtiendrai une image remplie de couleur noire. Quelqu'un peut-il me guider? Merci d'avance.Android capture d'écran opengl avec support de canal alpha

Merci, Midhun

Répondre

2

Salut, je trouve la solution à ma question et je vais coller le code ici. Cela peut être utile pour d'autres personnes ayant besoin d'un support alpha.

public static Bitmap SavePixels(int x, int y, int w, int h, GL10 gl) 
{ 
    int b[]=new int[w*(y+h)]; 
    int bt[]=new int[w*h]; 
    IntBuffer ib=IntBuffer.wrap(b); 
    ib.position(0); 
    gl.glReadPixels(x, 0, w, y+h, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ib); 

    for(int i=0, k=0; i<h; i++, k++) 
    {//remember, that OpenGL bitmap is incompatible with Android bitmap 
     //and so, some correction need.   
      for(int j=0; j<w; j++) 
      { 
       int pix=b[i*w+j]; 
       int pb=(pix>>16)&0xff; 
       int pr=(pix<<16)&0x00ff0000; 
       int pix1=(pix&0xff00ff00) | pr | pb; 
       bt[(h-k-1)*w+j]=pix1; 
      } 
    } 


    Bitmap sb=Bitmap.createBitmap(bt, w, h, Bitmap.Config.ARGB_8888); 
    return sb; 
} 
+0

Je reçois des couleurs erronées avec cette solution, par exemple, les couleurs jaunes sont peintes en bleu ... ¿? comment le résoudre s'il vous plaît? – NullPointerException

0

Cette "solution" consiste simplement à réaliser une capture d'écran. Les valeurs alpha que vous obtenez de glReadPixels sont jusqu'à 255, même si vous n'avez rien dessiné sur ces pixels. Si c'est possible, ce sera une solution OpenGL.