Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 33
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    37

    Fare screenshot di un Panel

    Ciao ragazzi girando su internet ho trovato questa classe


    codice:
    import java.awt.AWTException;
    import java.awt.Rectangle;
    import java.awt.Robot;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.awt.Dimension;
    import java.awt.*;
    
    import javax.imageio.ImageIO;
    
    public class RobotExp {
        
        public static void main(String[] args) {
            
            try {
                
                Robot robot = new Robot();
                // Capture the screen shot of the area of the screen defined by the rectangle
    			Dimension screen = 	Toolkit.getDefaultToolkit().getScreenSize();
                BufferedImage bi=robot.createScreenCapture(new Rectangle(800,800));
                ImageIO.write(bi, "jpg", new File("graphics1.jpg"));
                
            } catch (AWTException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    Vorrei che al posto di fare lo screenshot dell'intero Desktop, facesse lo screenshot di un JFrame è possibile? Ci ho provato in diversi modi ma mi sono dannato senza risultati.

    Credo che la parte da modificare sia:
    codice:
    Dimension screen = 	Toolkit.getDefaultToolkit().getScreenSize();
    O sbaglio? Ma come faccio a passargli il JPANEL piuttosto che lo screensize?

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Re: Fare screenshot di un Panel

    Originariamente inviato da Snake17x
    Ciao ragazzi girando su internet ho trovato questa classe


    codice:
    import java.awt.AWTException;
    import java.awt.Rectangle;
    import java.awt.Robot;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.awt.Dimension;
    import java.awt.*;
    
    import javax.imageio.ImageIO;
    
    public class RobotExp {
        
        public static void main(String[] args) {
            
            try {
                
                Robot robot = new Robot();
                // Capture the screen shot of the area of the screen defined by the rectangle
    			Dimension screen = 	Toolkit.getDefaultToolkit().getScreenSize();
                BufferedImage bi=robot.createScreenCapture(new Rectangle(800,800));
                ImageIO.write(bi, "jpg", new File("graphics1.jpg"));
                
            } catch (AWTException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    Vorrei che al posto di fare lo screenshot dell'intero Desktop, facesse lo screenshot di un JFrame è possibile? Ci ho provato in diversi modi ma mi sono dannato senza risultati.

    Credo che la parte da modificare sia:
    codice:
    Dimension screen = 	Toolkit.getDefaultToolkit().getScreenSize();
    O sbaglio? Ma come faccio a passargli il JPANEL piuttosto che lo screensize?
    Sia JFrame che JPanel sono sottoclassi di Component che ha il metodo getBounds (senza parametri), il quale ti fornisce le coordinate che comprendono l'area dello schermo occupata dal componente; ottenute queste (te le restituisce sotto forma di Rectangle) usale per fare lo screen come nell'esempio che hai postato.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    37
    Quindi devo fare questo?

    codice:
    Al posto di:
    Dimension screen = 	Toolkit.getDefaultToolkit().getScreenSize();
    
    Devo mettere
    Dimension screen = 	NomeClasseContenenteilJfrane().getBounds();
    Perchè il
    codice:
    BufferedImage bi=robot.createScreenCapture(new Rectangle(300,300));
    Credo stabilisca la dimensione dello screenshot.

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da Snake17x
    Quindi devo fare questo?

    codice:
    Al posto di:
    Dimension screen = 	Toolkit.getDefaultToolkit().getScreenSize();
    
    Devo mettere
    Dimension screen = 	NomeClasseContenenteilJfrane().getBounds();
    Perchè il
    codice:
    BufferedImage bi=robot.createScreenCapture(new Rectangle(300,300));
    Credo stabilisca la dimensione dello screenshot.
    getBounds restituisce Rectangle, non Dimension, sta scritto nella documentazione... del resto se devi determinare un rettangolo sono necessari 4 numeri (coordinate, altezza e larghezza), il Dimension contiene solo due valori.
    Se istanzi un Rectangle passandogli solo due numeri (e anche qui bastava guardare la documentazione), li tratta come altezza e larghezza, e considera le coordinate del punto da cui partire come la coppia (0, 0).

    A createScreenCapture devi passare il Rectangle restituito da getBounds.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    37
    Ti ringrazio, però se utilizzo:

    codice:
    BufferedImage bi=robot.createScreenCapture(new Rectangle(getBounds()));
    Mi da errore di compilazione, forse perchè è una classe esterna a quella in cui è dichiarato il setBounds?

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da Snake17x
    Ti ringrazio, però se utilizzo:

    codice:
    BufferedImage bi=robot.createScreenCapture(new Rectangle(getBounds()));
    Mi da errore di compilazione, forse perchè è una classe esterna a quella in cui è dichiarato il setBounds?
    getBounds va invocato sul componente del quale vuoi ottenere, per l'appunto, coordinate e dimensioni. E restituisce già un Rectangle.

    Ovvio che dia errore di compilazione, a meno che non ti trovi in una classe che estenda Component, perché se scrivi solamente il metodo così lui lo cerca nella classe in cui si trova quella riga di codice... del resto, in quel modo come fa a sapere DI COSA deve prendere le dimensioni?

    codice:
    BufferedImage image =
      new Robot().createScreenCapture(component.getBounds());
    P.S.: il codice non l'ho provato.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    37
    Mi dice error, variabile component non trovata

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da Snake17x
    Mi dice error, variabile component non trovata


    Ovviamente al posto di component andava il nome del tuo componente.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    37
    Sisi lo avevo provato, ma mi da comunque

    variable JFrame non trovata.

    Io il JFrame l'ho dichiarato in un altra classe
    codice:
    class CaricaImmagini extends JFrame  {     
    
    public CaricaImmagini(){
    
    super("GT5 Event Maker");
    setBounds(0, 0, 600, 730); 
    setVisible(true); 
     }
    }

    E la classe RobotExp che viene richiamata tramite il click su un bottone.
    codice:
    public class RobotExp {      
    
    
        public static void screen() {
            
            try {  
                Robot robot = new Robot();
                // Capture the screen shot of the area of the screen defined by the rectangle
                Dimension screen =  Toolkit.getDefaultToolkit().getScreenSize();
    
     BufferedImage image =
      new Robot().createScreenCapture(JFrame.getBounds());
    
                ImageIO.write(bi, "jpg", new File("graphics1.jpg"));
                
                
            } catch (AWTException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    Non capisco dove sbaglio, scusate ancora se vi faccio perdere tempo con la mia incompetenza.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.