Jogl: Zugriff auf FrameBuffer , bzw. Color und Tiefenpuffer

Guadrion

Mitglied
Hi
also vorneweg ich habe nicht vor Screenshots zu machen, ich möchte jezt erst mal zum Einstieg den Color und den Tiefenpuffer meines Canvas auslesen, um später dann gewisse berechnungen darauf auszuführen.

Ich habe folgendes COdesnippet zum Ausprobieren

Code:
public void keyPressed(KeyEvent e) {
		
		// Auslesen der Linien und übertragen in ein bild
		int width = worldwindCanvas.getWidth();
		int height = worldwindCanvas.getHeight();

		BufferedImage img = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_RGB);

		int sizeOfBuffer = width * height * 3;
		ByteBuffer buff = BufferUtil.newByteBuffer(sizeOfBuffer);

		// Screenshot
		canvas.getGL().glReadPixels(0, 0,
				width,
				height, GL.GL_RGB,
				GL.GL_UNSIGNED_BYTE, buff);

		// img.setRGB(0, 0, width, height, buff.asIntBuffer().array(), 0, 0);
		try {
			ImageIO.write(img, "PNG", new File("test.png"));
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}

Allerdings scheint buff.asIntBuffer().array nicht korrekt zu funktionieren, ich bekomme folgenden Fehler:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedOperationException
	at java.nio.IntBuffer.array(IntBuffer.java:940)
	at visualization.frames.GeoFrame.keyPressed(GeoFrame.java:567) ....

Ich habe es auch mal durchgerechnet: In dem Buffer stecken pro Pixel für mich 3 Byte Werte. Wenn ich buff.asIntBuffer() aufrufe, fasst er aber glaube ich 4 Bytes zu einem Int zusammen. Könnt ihr mir sagen wie ich aus dem ByteBuffer ein Int Array erzeugen kann, so dass ich es per setRGB dem Bild zuweisen kann?
 
Zurück