Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    18

    [java] metodo cattura schermo??(stamp)

    salve volevo chiederer un'informazione..
    mi serviva un metodo che cattura l'immagine dello schermo....ovvero un'equivalente del tasto stamp...magari che non mi da tutto lo schermo bensì solo una porzione dello schermo ( date le cordinate)

    Tutto questo mi serva x passare a una variabile grafica l'immagine del programma da stampare premendo il tasto STAMPA

    saluti e grazie x le eventuali risposte

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [java] metodo cattura schermo??(stamp)

    Originariamente inviato da ssimxp
    mi serviva un metodo che cattura l'immagine dello schermo....ovvero un'equivalente del tasto stamp...magari che non mi da tutto lo schermo bensì solo una porzione dello schermo ( date le cordinate)
    In questo mio post avevo scritto un semplice esempio di codice per catturare lo schermo e scrivere la immagine su file. Si può scegliere l'area che si vuole .... basta solo passare un apposito oggetto Rectangle.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    18
    si xò io la variabile che poi va a essere stampata l'ho dichiarata di tipo grafico...
    nn posso converti img con graphics..
    cm faccio?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ssimxp
    si xò io la variabile che poi va a essere stampata l'ho dichiarata di tipo grafico...
    nn posso converti img con graphics..
    Stai parlando di un java.awt.Graphics/Graphics2D?? Guarda che puoi benissimo disegnare un BufferedImage su un Graphics/Graphics2D.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    18
    puoi spiegarmi meglio???
    qst è il mio codice:
    import java.awt.print.*;
    import java.awt.*;


    public class MindPrint implements Printable
    {

    public int print(Graphics grap,PageFormat pageFormat, int pageIndex) throws PrinterException
    {
    if(pageIndex > 0)
    return NO_SUCH_PAGE;


    try
    {



    }
    catch (Exception e){ }

    //grap.drawString("Ready to roll out!", (int)pageFormat.getImageableX(), (int)pageFormat.getImageableY()+5);
    //grap.setColor(Color.blue);
    //grap.drawLine((int)pageFormat.getImageableX(), (int)pageFormat.getImageableY(),(int)pageFormat.ge tImageableWidth(), (int)pageFormat.getImageableHeight());

    return PAGE_EXISTS;

    }

    }
    nel try....devo fare in modo che in grap venga aggiunta l'immagine d qll parte dello schermo che mi interessa...

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ssimxp
    nel try....devo fare in modo che in grap venga aggiunta l'immagine d qll parte dello schermo che mi interessa...
    Se vai a vedere, Graphics ha diversi metodi drawImage che permettono di disegnare un Image (e BufferedImage è-un Image!).

    La principale cosa a cui prestare attenzione sono le unità di misura. Se non fai scalamenti particolari sul Graphics fornito al metodo print(), 1 unità è uguale a 1/72esimo di pollice. Se tu avessi una immagine di 1024x768 pixel e la stampassi esattamente come 1024x768 unità sul Graphics otterresti una immagine di circa 36 x 27 cm, che non ci starebbe nemmeno in un foglio A4.

    Quindi devi per forza fare qualche calcolo per adattare la immagine alla dimensione della pagina o comunque in base ai tuoi criteri (es. adatta la immagine alla larghezza del foglio).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    18
    altrimenti cm potrei fare x stampare il mio programma? pensavo....e se passassi al metodo d stampa il frame del programma?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ssimxp
    altrimenti cm potrei fare x stampare il mio programma? pensavo....e se passassi al metodo d stampa il frame del programma?
    Avevo fatto proprio questo tipo di esempio in questa discussione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    18
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.print.*;
    import javax.swing.*;

    public class PrintTestFrame extends JFrame implements ActionListener, Printable
    {
    private PrinterJob job;
    private JButton buttonPrint;

    public PrintTestFrame ()
    {
    super ("Print Test");

    setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    setSize (300, 300);

    buttonPrint = new JButton ("PRINT");
    buttonPrint.addActionListener (this);

    add (buttonPrint, BorderLayout.SOUTH);

    job = PrinterJob.getPrinterJob ();
    job.setPrintable (this);
    }

    public void actionPerformed (ActionEvent ae)
    {
    if (job.printDialog ())
    {
    try {
    job.print ();
    } catch (Exception e) {
    JOptionPane.showMessageDialog (this, "Errore");
    }
    }
    }

    public int print (Graphics g, PageFormat pageFormat, int pageIndex)
    {
    if (pageIndex > 0)
    return NO_SUCH_PAGE;

    double imageableWidth = pageFormat.getImageableWidth ();
    double imageableHeight = pageFormat.getImageableHeight ();

    double frameWidth = getWidth ();
    double frameHeight = getHeight ();

    double scale = imageableWidth / frameWidth; // Modo "Fit width"

    Graphics2D g2d = (Graphics2D) g;
    g2d.translate (pageFormat.getImageableX (), pageFormat.getImageableY ());
    g2d.scale (scale, scale);

    printAll (g); // Invoca printAll sul frame (this)

    return PAGE_EXISTS;
    }

    public static void main (String[] args)
    {
    SwingUtilities.invokeLater (new Runnable ()
    {
    public void run ()
    {
    PrintTestFrame f = new PrintTestFrame ();
    f.setVisible (true);
    }
    });
    }
    }

    c'è un problema xò...io il frame l'ho in un'altra classe.... :master:

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ssimxp
    c'è un problema xò...io il frame l'ho in un'altra classe.... :master:
    La questione è molto semplice. Nel mio esempio il nocciolo di tutta la fase di stampa è la invocazione di quel printAll() sul frame. E dal momento che quella mia classe estende JFrame ed allo stesso tempo implementa Printable, in quel punto il riferimento al frame è proprio il 'this'.

    Concettualmente la interfaccia Printable serve per indicare un qualcosa (oggetto) che è "stampabile" e che implementa quel metodo print(....). Quindi prima di tutto devi domandarti che cosa intendi che sia "stampabile". Solo il tuo frame e basta?? Allora concettualmente è corretto che Printable e print() li metti in quella tua classe che estende JFrame, se ne hai una. Se non hai una classe che estende JFrame (perché magari il JFrame lo crei "al volo"), puoi comunque creare una classe es.:

    codice:
    public class MyDocument implements Printable {
        private JFrame frame;
    ...
    e metterai un costruttore che riceve il reference al JFrame e lo assegna alla variabile di istanza. Quando verrà invocato print() ... beh, semplicemente lo userai.

    Insomma ... si tratta solo di strutturare le classi in modo logico. Alla Printing API non interessa sapere cosa devi stampare o, nel tuo caso, dove è gestito il JFrame e dove tieni i reference!
    Si limita solo ad invocare il print() e poi sei tu a dover stampare cosa/come vuoi. Quindi devi fare in modo che la classe che implementa Printable contenga tutto il "contesto" di dati utile per poter realizzare la stampa in print(). Nel tuo caso il "contesto" comprende solo un reference al JFrame.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.