package org.jcae.viewer3d.test; import java.awt.BorderLayout; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.net.MalformedURLException; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.SwingUtilities; import javax.swing.WindowConstants; import org.jcae.viewer3d.ScreenshotListener; import org.jcae.viewer3d.View; import org.jcae.viewer3d.post.Legend; public class TestScreenshot extends JFrame implements KeyListener, ScreenshotListener { private Legend legend=new Legend(); private View view=new View(this); /** Create frame with a view and a legend */ public TestScreenshot() { setSize(800,600); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); view.setOriginAxisVisible(true); view.setFixedAxisVisible(true); getContentPane().add(view, BorderLayout.CENTER); getContentPane().add(legend, BorderLayout.WEST); view.addKeyListener(this); } public static void main(String[] args) { TestScreenshot t=new TestScreenshot(); t.setVisible(true); } public void keyTyped(KeyEvent e) { } public void keyPressed(KeyEvent e) { System.out.println(e); if(e.getKeyChar()=='s') { view.takeScreenshot(this); } } public void keyReleased(KeyEvent e) { } public void shot(BufferedImage snapshot) { try { int width=legend.getWidth()+view.getWidth(); int height=view.getHeight(); BufferedImage screenshot = new BufferedImage( width, height, BufferedImage.TYPE_INT_RGB); BufferedImage legendIm = screenshot.getSubimage( 0, 0, legend.getWidth(), height); BufferedImage viewIm = screenshot.getSubimage( legend.getWidth(), 0, view.getWidth(), height); legend.paint(legendIm.createGraphics()); System.out.println("take view snapshot"); System.out.println("take view snapshot finished"); viewIm.createGraphics().drawRenderedImage( snapshot, new AffineTransform()); ImageIO.write(screenshot, "png", File.createTempFile("jcae-viewer3d-snap",".png")); } catch (IOException e) { e.printStackTrace(); } } }