RSS
Facebook
G+

Buscador de IntercambioSOS:


Retroceder   Foro de Ayuda IntercambiosvirtualeS > Soporte Sobre: Educación & Entretenimiento > Zona Académica > Programación

Respuesta
 
Herramientas Desplegado
Antiguo 06-ago-2011     #1
Amor y Paz [JAVA] Capturar Pantalla

Hola gente de intercambios!!! aqui les traigo una pequeña aplicación para capturar la pantalla.

Está hecha en Java!!!




Basicamente lo que hace es desplegar una Ventana como esta...




y presionando el botón capturar obtenemos una captura de nuestra pantalla.

Aquí un ejemplo!!!




Aquí el fuente, el cual está compuesto por dos clases Capturar (Principal) e ImageFileFilter (Para establecer un filtro de imagen JPG, PNG, GIF, etc).

[Clase Capturar]

Código PHP:
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SwingConstants;
import javax.swing.UIManager;


public class 
Capturar extends JFrame{
    
    private 
JButton boton null;
    private 
JLabel etiqueta null;
    private 
BufferedImage buffImg null;
    private 
File nombreArchivo null;
    
    private 
Dimension resolucion null;
    private 
JFileChooser fileChooser null;
    private 
BufferedImage bi null;
    private 
ImageIcon imageIcon null;
    private 
int mitadPanelAnchomitadPanelAlto;
    private 
int mitadImagenAnchomitadImagenAlto;
    private 
String auxFile = new String(), extension = new String();
    
    public 
Capturar(){
        
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
this.setTitle("Capturar");
        
this.setLayout(new FlowLayout());
        
resolucion Toolkit.getDefaultToolkit().getScreenSize();
        
fileChooser = new JFileChooser();
        
boton = new JButton("Capturar");
        
boton.setToolTipText("Capturar la pantalla");
        
boton.setIcon(new ImageIcon(getClass().getResource("imagen/camera.png")));
        
boton.setHorizontalTextPosition(SwingConstants.CENTER);
        
boton.setVerticalTextPosition(SwingConstants.TOP);
        
boton.addActionListener(new manejadorEventos());
        
this.getContentPane().add(boton);
        
etiqueta = new JLabel("by RagdE");
        
this.getContentPane().add(etiqueta);
        
this.setSize(200150);
    }
    
    
//capturar la pantalla... se obtiene un bufferImage
    
public BufferedImage capturarPantalla(){
        try {
            return (new 
Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize())));
        } catch (
AWTException ex) {
            
Logger.getLogger(Capturar.class.getName()).log(Level.SEVEREnullex);
        }
        return 
null;
    }
    
    
//transformar el bufferImage a una imagen
    
public Image BufferedtoImage(BufferedImage bufferedImage) { 
        return 
Toolkit.getDefaultToolkit().createImage(bufferedImage.getSource()); 
    } 
    
    
// crear la imagen
    
public RenderedImage crearImagen() {

        
// Objetos
        
bi = new BufferedImage(resolucion.widthresolucion.heightBufferedImage.TYPE_INT_RGB);

        
Graphics g bi.createGraphics();
        
g.setColor(Color.WHITE);
        
g.fillRect(00resolucion.widthresolucion.height);
        
        
mitadPanelAncho = (resolucion.width) / 2;
        
mitadPanelAlto = (resolucion.height) / 2;
        
        
mitadImagenAncho imageIcon.getIconWidth() / 2;
        
mitadImagenAlto imageIcon.getIconHeight() / 2;
        
        
g.drawImage(imageIcon.getImage(), mitadPanelAncho mitadImagenAnchomitadPanelAlto mitadImagenAltonull);
    
        
g.dispose();
        
//pruebaBi = bi;
        
return bi;
        
//return imagenActual;
    
}
    
    
//comprueba la extensión para saber si es jpg, png, gif etc.
    
public boolean comprobarExtension(File f){
        
String[] arreglo f.getName().split("\\.");
        
int pos = (arreglo.length)-1;

        if(
nombreArchivo.toString().isEmpty()){
             
JOptionPane.showMessageDialog(null,"Nombre de archivo inválido","Información"JOptionPane.INFORMATION_MESSAGE);
             return 
false;
         }
        else if(
arreglo.length && arreglo[pos].compareTo("png") == || arreglo[pos].compareTo("jpg") == 
                
|| arreglo[pos].compareTo("png") == 0){
            
extension arreglo[pos];
            return 
true;
        }else if(
arreglo.length == 1){
            
auxFile f.getName() + ".jpg";
            
extension "jpg";
            return 
true;
        }else{
            
JOptionPane.showMessageDialog(null,"Extensión inválida","Información"JOptionPane.INFORMATION_MESSAGE);
            return 
false;
        }
    }
    
    public 
String getExtension(){
        return 
extension;
    }
    
    public 
void saveImagen(){
        
         
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
         
fileChooser.setFileSelectionMode(0);
         
         
ImageFileFilter iff = new ImageFileFilter();
         
fileChooser.setFileFilter(iff);
         
         
fileChooser.setAcceptAllFileFilterUsed(false);
         
         
fileChooser.setSelectedFile(new File("Captura.png"));
         
String ruta null;
         
int resultado fileChooser.showSaveDialog(fileChooser);
         
         
nombreArchivo fileChooser.getSelectedFile();
         
         if(
resultado == fileChooser.APPROVE_OPTION && comprobarExtension(nombreArchivo) == true){
             if(!
auxFile.isEmpty()){
                 
ruta nombreArchivo.getParent() +"\\"auxFile;
             }else{
                 
ruta nombreArchivo.getAbsolutePath();
             }
             
crearImagen();

             try{
                 
File file = new File(ruta); 
                 
ImageIO.write(bigetExtension(), file);
                 
JOptionPane.showMessageDialog(null,"Archivo guardado","Información"JOptionPane.INFORMATION_MESSAGE);
             }catch (
IOException e) {
                 
System.out.println(e.getMessage());
            }
             
auxFile "";
         }
    }
    
    public class 
manejadorEventos implements ActionListener {

        @
Override
        
public void actionPerformed(ActionEvent e) {
            
            if(
e.getSource() == boton){
                
//se oculta la ventana
                
Capturar.this.setVisible(false);
                
//se hace un pequeño sleep
                
try {
                    
Thread.sleep(300);
                } catch (
InterruptedException e1) {
                    
// TODO Auto-generated catch block
                    
e1.printStackTrace();
                }
                
//se captura la pantalla
                
buffImg capturarPantalla();
                
//convierto la imagen a ImageIcon
                
imageIcon = new ImageIcon(BufferedtoImage(buffImg));
                
//hacemos visible la ventana
                
Capturar.this.setVisible(true);
                
//se llama al metodo guardar
                
saveImagen();
            }
            
        }
        
    }
    
    public static 
void main(String[] args){
        
java.awt.EventQueue.invokeLater(new Runnable(){
            public 
void run(){
                try{
                    
JFrame.setDefaultLookAndFeelDecorated(true);
                    
JDialog.setDefaultLookAndFeelDecorated(true);
                    
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    
                    new 
Capturar().setVisible(true);
                }catch(
Exception e){
                    
System.out.println("Error en look and Feel");
                }
            }
        });
    }



[Clase ImageFileFilter]


Código PHP:
import java.io.File;

import javax.swing.filechooser.FileFilter;



public class 
ImageFileFilter extends FileFilter{
    
  private final 
String[] arregloExtensiones = new String[] {"jpg""png""gif"};
  private 
String extensionSelected "otra";


  public 
boolean accept(File file){
    for (
String extension arregloExtensiones){
        
      if (
file.getName().toLowerCase().endsWith(extension)){
        
System.out.println("entro comprobar extension");
        
extensionSelected extension;
        return 
true;
      }
      
    }
    return 
false;
  }
  
  public 
String getDescription() {
      return 
"*.png, *.jpg o *.gif";
  }
  
  public 
String getSelectExtension(){
      return 
extensionSelected;
  }
  

Bueno espero que les guste y les sirva de guia para realizar algo más completo.

Responder Citando
Los siguientes 5 usuarios agradecen a RagdE por este mensaje:
carmen10 (08-ago-2011), joselmq (08-ago-2011), nokiajavi (24-ago-2011), Orpheus96 (08-ago-2011), wlsnch (06-ago-2011)
Antiguo 06-ago-2011     #2
Feliz

Muchas gracias Ragde por compartir el código fuente en Java para Capturar la Pantalla.

Saludos,


“ No hay que confundir nunca el conocimiento con la sabiduría. El primero nos sirve para ganarnos la vida; la sabiduría nos ayuda a vivir. ” - Sorcha Carey
Responder Citando
Los siguientes 2 usuarios agradecen a wlsnch por este mensaje:
baduser (07-ago-2011), Orpheus96 (08-ago-2011)
Antiguo 06-ago-2011     #3
Predeterminado

gracias, excelente programita....

salu2
Responder Citando
Los siguientes 2 usuarios agradecen a baduser por este mensaje:
Orpheus96 (08-ago-2011), wlsnch (07-ago-2011)
Antiguo 07-ago-2011     #4
Predeterminado

que tiene de diferente con el boton impr pant?
Responder Citando
Los siguientes 2 usuarios agradecen a Kravitec por este mensaje:
Orpheus96 (08-ago-2011), wlsnch (07-ago-2011)
Antiguo 07-ago-2011     #5
Predeterminado

Ver MensajeIniciado por Kravitec Ver Mensaje
que tiene de diferente con el boton impr pant?


Hola amigo Kravitec:

Lo que ha desarrollado el amigo RagdE es una aplicación muy poderosa.

Te pongo un ejemplo de tantos que se pueden utilizar. A veces suele pasar que en las oficinas algún compañero tuyo quiere usar tu PC sin permiso, lo que puedes hacer es modificar este programa con permiso del autor que desarrollo, la idea es que saque cada cierto segundo la captura de pantalla de forma automática, con esto puedes tener una prueba fisíca(imagen digital) de lo que hacen en tu PC en tu ausencia, e inclusive a esa imagen puedes hasta etiquetar la fecha y la hora.

La diferencia es que con la tecla "PrtScr", captura la pantalla de forma manual necesita de la presencia física de la persona que teclee la tecla, perdon por la redundancia.

No sé si eso era tu pregunta en el mensaje. Si no lo es mil disculpas.

Saludos,


“ No hay que confundir nunca el conocimiento con la sabiduría. El primero nos sirve para ganarnos la vida; la sabiduría nos ayuda a vivir. ” - Sorcha Carey
Responder Citando
Usuarios que han agradecido este mensaje de wlsnch
Orpheus96 (08-ago-2011)
Antiguo 07-ago-2011     #6
Predeterminado

Ver MensajeIniciado por wlsnch Ver Mensaje


Hola amigo Kravitec:

Lo que ha desarrollado el amigo RagdE es una aplicación muy poderosa.

Te pongo un ejemplo de tantos que se pueden utilizar. A veces suele pasar que en las oficinas algún compañero tuyo quiere usar tu PC sin permiso, lo que puedes hacer es modificar este programa con permiso del autor que desarrollo, la idea es que saque cada cierto segundo la captura de pantalla de forma automática, con esto puedes tener una prueba fisíca(imagen digital) de lo que hacen en tu PC en tu ausencia, e inclusive a esa imagen puedes hasta etiquetar la fecha y la hora.

La diferencia es que con la tecla "PrtScr", captura la pantalla de forma manual necesita de la presencia física de la persona que teclee la tecla, perdon por la redundancia.

No sé si eso era tu pregunta en el mensaje. Si no lo es mil disculpas.

Saludos,
ya veo, gracias por la explicacion =)

aunq podria ser usado con malas intenciones tambien xP
Responder Citando
Los siguientes 3 usuarios agradecen a Kravitec por este mensaje:
baduser (08-ago-2011), Orpheus96 (08-ago-2011), wlsnch (07-ago-2011)
Antiguo 08-ago-2011     #7
Predeterminado

Muchas Gracias amigo RagdE por compatir la aplicación con nosotros. =)

ja, la misma pregunta me hice como kravitec jeje

Buena explicación amigo wlsnch aclaraste también mi duda sin saberlo xD

Como dice el amigo Kravitec puede ser usado para malas intenciones, pero eso ya depende del uso que le demos nosotros, el programa es por demas interesante.

Saludos!!

Responder Citando
Los siguientes 2 usuarios agradecen a Orpheus96 por este mensaje:
baduser (08-ago-2011), wlsnch (08-ago-2011)
Antiguo 08-ago-2011     #8
Predeterminado

Muchas gracias ....................saludos




El que busca la verdad corre el riesgo de encontrarla.
Responder Citando
Los siguientes 2 usuarios agradecen a carmen10 por este mensaje:
baduser (08-ago-2011), wlsnch (08-ago-2011)
Respuesta

Etiquetas
capturar, java, pantalla, screen


(0 miembros y 1 visitantes)
 
Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado

Ir al Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
*.* Instalar OS/2 WARP4 en VMWare 5.5.3 Super Detallado [Concurso 2011] nokiajavi Tutoriales & Videos Tutoriales 11 26-sep-2012 17:56
Pantalla demasiado fragil? jose_cast Celulares, PDA & Tecnología Móvil 7 25-feb-2011 10:07
sistema operativo nuevo para netbooks Jolicloud xhyruja Sistemas Operativos 8 15-feb-2011 16:55
Mapa DRM W5/W510 Arleanjose Celulares, PDA & Tecnología Móvil 2 19-sep-2010 19:13


Desarrollado por: vBulletin® Versión 3.8.1
Derechos de Autor ©2000 - 2024, Jelsoft Enterprises Ltd.
Ad Management by RedTyger