2010-11-13 3 views
3

Может ли кто-нибудь дать мне знать, как я могу читать пиксели из буфера в JOGL. Пожалуйста, проиллюстрируйте с помощью кода.ReadPixel в Jogl

ответ

4

После рендеринга делается, вызовите этот метод:

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

Береги, исходный код выше это хорошо, но вы должны достаточно создать прямой буфер байт с помощью класса Буферы (в JOGL 2.0) или BufferUtils (в JOGL 1.1.1a) и использует устаревшую версию JOGL (JOGL 1.1.1a). Скорее используйте JOGL 2.0. – gouessej