/******************************************************************************* * Copyright (c) 2001, 2010 Mathew A. Nelson and Robocode contributors * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://robocode.sourceforge.net/license/epl-v10.html * * Contributors: * Flemming N. Larsen * - Initial implementation *******************************************************************************/ package net.sf.robocode.ui.battleview; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import javax.imageio.IIOImage; import javax.imageio.ImageIO; import javax.imageio.ImageWriteParam; import javax.imageio.ImageWriter; import javax.imageio.stream.FileImageOutputStream; import net.sf.robocode.io.FileUtil; /** * This utility class for saving screenshots of the battle view. * * @author Flemming N. Larsen (original) * * @since 1.7.2 */ public class ScreenshotUtil { private final static SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH.mm.ss.SSS"); public static void saveScreenshot(BufferedImage screenshot, String format, float compressionQuality) { FileImageOutputStream output = null; ImageWriter writer = null; File screenshotDir = FileUtil.getScreenshotsDir(); FileUtil.createDir(screenshotDir); File file = new File(screenshotDir, DATE_FORMAT.format(new Date()) + '.' + format.toLowerCase()); try { // Instantiate an ImageWriteParam object with default compression options Iterator<ImageWriter> it = ImageIO.getImageWritersByFormatName(format); writer = (ImageWriter) it.next(); ImageWriteParam iwp = writer.getDefaultWriteParam(); // If compression is supported, then set the compression mode if (iwp.canWriteCompressed()) { // Use explicit compression mode iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); // Set compression quality, where 1 specifies minimum compression and maximum quality iwp.setCompressionQuality(compressionQuality); // float between 0 and 1 } // Write the screen shot to file output = new FileImageOutputStream(file); writer.setOutput(output); IIOImage image = new IIOImage(screenshot, null, null); writer.write(null, image, iwp); } catch (IOException e) { e.printStackTrace(); } finally { if (writer != null) { writer.dispose(); } if (output != null) { try { output.close(); } catch (IOException e) { e.printStackTrace(); } } } } }