2010-11-13 4 views
3

Quelqu'un peut-il me faire savoir comment puis-je lire les pixels du tampon dans JOGL. S'il vous plaît illustrer avec un code.ReadPixel in Jogl

Répondre

4

Après le rendu est fait, appeler cette méthode:

public BufferedImage toImage(GL gl, int w, int h) { 

    gl.glReadBuffer(GL.GL_FRONT); // or GL.GL_BACK 

    ByteBuffer glBB = ByteBuffer.allocate(3 * w * h); 
    gl.glReadPixels(0, 0, w, h, GL.GL_BGR, GL.GL_BYTE, glBB); 

    BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); 
    int[] bd = ((DataBufferInt) bi.getRaster().getDataBuffer()).getData(); 

    for (int y = 0; y < h; y++) { 
     for (int x = 0; x < w; x++) { 
      int b = 2 * glBB.get(); 
      int g = 2 * glBB.get(); 
      int r = 2 * glBB.get(); 

      bd[(h - y - 1) * w + x] = (r << 16) | (g << 8) | b | 0xFF000000; 
     } 
    } 

    return bi; 
} 
+0

Prenez garde, le code source ci-dessus est bien, mais vous devriez plutôt créer un tampon d'octets directement en utilisant les buffers de classe (en JOGL 2.0) ou BufferUtils (dans JOGL 1.1.1a) et utilise une version obsolète de JOGL (JOGL 1.1.1a). Utilisez plutôt JOGL 2.0. – gouessej