001 package nl.cwi.sen1.visplugin.screenshotmaker;
002
003 import java.awt.Dimension;
004 import java.awt.Graphics2D;
005 import java.awt.Rectangle;
006 import java.awt.image.BufferedImage;
007 import java.io.File;
008 import java.io.IOException;
009
010 import javax.imageio.ImageIO;
011 import javax.swing.JPanel;
012
013 /**
014 * ScreenshotMaker has the functionality to export a JPanel as an image
015 *
016 * @author R. Bergen
017 * @author S. Tharmarajah
018 * @date 09-03-2007
019 */
020 public class ScreenshotMaker {
021
022 public static final String JPEG_EXTENSION = "jpg";
023 public static final String PNG_EXTENSION = "png";
024 public static final String DEFAULT_EXTENSION = PNG_EXTENSION;
025
026 /**
027 * Save a JPanel as an image to a given destination.
028 *
029 * @param JPanel The Jpanel which should be saved
030 * @param exportDestination The destination of the exported image
031 * @param fileExtension The extension of the exported image
032 *
033 * @author R. Bergen
034 * @author S. Tharmarajah
035 * @date 09-03-2007
036 */
037 public static void saveScreenshot(JPanel jPanel, String exportDestination, String fileExtension) {
038
039 // check extensions
040 if (!fileExtension.equals(JPEG_EXTENSION) && !fileExtension.equals(PNG_EXTENSION)) {
041 fileExtension = DEFAULT_EXTENSION;
042 }
043
044 // make screenshot
045 BufferedImage bufferedImage = createImageFromPanel(jPanel);
046
047 // Check if file already exists, if so delete the existing file
048 File file = new File(exportDestination + "." +fileExtension);
049 boolean exists = file.exists();
050
051 if(exists)
052 file.delete();
053
054 // save to disk
055 try {
056 ImageIO.write(bufferedImage, fileExtension, file);
057 } catch (IOException e) {
058 // TODO: Throw the exception to a dialog in the Meta Studio
059 }
060
061 }
062
063 /**
064 * Create a BufferedImage from a given JPanel.
065 *
066 * @param JPanel The Jpanel which should be saved
067 * @return bufferedImage a BufferedImage of the given JPanel
068 *
069 * @author R. Bergen
070 * @author S. Tharmarajah
071 * @date 09-03-2007
072 */
073 private static BufferedImage createImageFromPanel(JPanel jPanel) {
074 Dimension dimension = jPanel.getSize();
075 Rectangle region = new Rectangle(0, 0, dimension.width, dimension.height);
076
077 BufferedImage bufferedImage = new BufferedImage(region.width, region.height, BufferedImage.TYPE_INT_RGB);
078 Graphics2D graphics2D = bufferedImage.createGraphics();
079 jPanel.paint(graphics2D);
080 graphics2D.dispose();
081
082 return bufferedImage;
083 }
084
085
086 }