viernes, 19 de marzo de 2010

Cómo tomar screenshots en Java

Aquí les dejo un pequeño truco (curioso, por cierto) en el cual se explica cómo tomar una captura de pantalla en Java desde un código bastante corto.

En esta ocasión lo haremos sin interfaz gráfica, el resultado será el mismo.

Lo primero: importamos las clases que ocuparemos:


import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import javax.imageio.ImageIO;

... y ahora sí, vamos con la clase:

public class ScreenshotApplication
{
    public static void main(String []args)
    {
        try
        {



            //Obtenemos un "ayudante"
Robot robot = new Robot();

            //Con lo siguiente sabremos qué resolución tiene nuestra pantalla
            Dimension d = Toolkit.getDefaultToolkit().getScreenSize();


            //Creamos un BufferedImage para poderlo manejar en memoria
BufferedImage bi = robot.createScreenCapture(new Rectangle(d));




            /*



             * La siguiente técnica consiste en darle un nombre de archivo



             * a partir de la hora y fecha del sistema, para poder generar



             * archivos cuyos nombres no se repitan.



             */
String filename = "/CualquierRuta/" + Calendar.getInstance().getTime() + ".jpg";




            /*
             * Utilizamos el método write, al que le pasamos los siguientes



             * parámetros:



             *



             * 1.- Cualquier objeto de tipo Buffer, en este caso un ImageBuffer,



             *     en pocas palabras, qué va a ser guardado en el archivo.



             * 2.- El tipo de archivo



             * 3.- La ruta donde será almacenada nuestra imágen en archivo.



             */
ImageIO.write(bi, "jpg", new File(filename));
            System.out.println("¡Screenshot tomada!");

        }
        catch (AWTException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

Algunos procesos levantarán excepciones (en caso de que exista algún error), por lo que es necesario "cacharlos" con sus respectivos try-catch. Para una mejor comprensión del manejo de excepciones visiten este enlace.

Podrán ver un resultado como el siguiente:

0 comentarios: