Hi,
I am using a simple Image object. The WritableImage you mentioned could be more efficient to copy the image data : you can implement a PixelReader reading image data more efficiently.
It first get screenshot as a JOGL TextureData object ("image")
Then a BufferedImage copy is created but you don't need it if you can implement a PixelReader reading from the TextureData).
You might try to get data even earlier by seing how AWTGLReadBufferUtil read the buffer to produce TextureData and derive it to return a PixelReader.
Hope that helps!