Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,755

    [JAVA]Immagine, dalla clipboard all'HardDisk


    devo velocizzare una macchinosa operazione:
    - prendo il printscreen
    - lo incollo in un editor di immagini
    - lo sovrascrivo al vecchio file jpg (dandogli così un nome ben definito così da usare il file in altre applicazioni)
    - altre cose

    speravo di fare il primo passaggio e poi lanciare un java coi giusti parametri per fare il resto
    per quanto riguarda la clipboard, ho visto che c'è una classe apposita (o forse è meglio questa ?:master: )
    ma per scrivere jpg come si fa?

    aspetto fiducioso
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

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

    Re: [JAVA]Immagine, dalla clipboard all'HardDisk

    Originariamente inviato da wallrider
    speravo di fare il primo passaggio e poi lanciare un java coi giusti parametri per fare il resto
    per quanto riguarda la clipboard, ho visto che c'è una classe apposita (o forse è meglio questa ?:master: )
    ma per scrivere jpg come si fa?
    Se ti può essere utile, guarda tra i miei Java Examples (vedi firma), sezione Images. Ci trovi un esempio di come ottenere lo "screenshot" e salvare la immagine su file. C'è anche un esempio di come copiare una immagine sulla clipboard.
    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 L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,755
    grazie, guardo subito
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

  4. #4
    Utente di HTML.it L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,755
    ok
    ho dato un'occhiata e credo che posso ottenere ciò che mi serve 'mixando' le due classi da te scritte

    ma come uso il metodo getContents della Clipboard?
    public Transferable getContents(Object requestor)
    qual'è l'immagine ritornata dalla clipboard?
    è l'oggetto Transferable o l'oggetto Object passato in parametro?
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da wallrider
    ma come uso il metodo getContents della Clipboard?

    qual'è l'immagine ritornata dalla clipboard?
    è l'oggetto Transferable o l'oggetto Object passato in parametro?
    Per leggere una immagine dalla clipboard basta solamente questo:

    codice:
    Clipboard clipBoard = Toolkit.getDefaultToolkit().getSystemClipboard();
    Transferable t = clipBoard.getContents(null);
    Image image = (Image) t.getTransferData(DataFlavor.imageFlavor);
    Ci possono essere eccezioni, vedi javadoc per i dettagli.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,755
    ok
    sembra semplice
    e allora perchè questa semplice classe
    codice:
    import java.awt.*;
    import java.awt.datatransfer.*;
    import java.io.*;
    import javax.imageio.*;
    
    public class Clipboard2Img {
        public static void main(String[] args) {
            try {
                Clipboard clipBoard = Toolkit.getDefaultToolkit().getSystemClipboard();
    			Transferable t = clipBoard.getContents(null);
    			Image image = (Image) t.getTransferData(DataFlavor.imageFlavor);
    
                // Saves the image to a file in PNG format.
                ImageIO.write(image , "jpg", new File("img.jpg"));
            } catch (Exception e) {
                System.err.println(e);
            }
        }
    }
    mi da questo errore?
    C:\Java\imgclip>javac Clipboard2Img.java
    Clipboard2Img.java:23: cannot find symbol
    symbol : method write(java.awt.Image,java.lang.String,java.io.File )
    location: class javax.imageio.ImageIO
    ImageIO.write(image , "jpg", new File("img.jpg"));
    eppure io l'import di imageio l'ho fatto
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

  7. #7
    Utente di HTML.it L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,755
    aspetta, il primo parametro della write è una RenderedImage, devo modificare :master:
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da wallrider
    mi da questo errore?

    eppure io l'import di imageio l'ho fatto
    Non è quello il problema! La questione è che dal Transferable (per il imageFlavor) tu sei solamente sicuro che l'oggetto restituito è un java.awt.Image (e quale sia veramente il tipo dell'oggetto, non lo sai a priori).
    Mentre ImageIO tratta solo dei BufferedImage (quando leggi) e dei RenderedImage (quando scrivi).

    Quindi non puoi passare banalmente un Image al write(). La soluzione è creare un BufferedImage, scriverci dentro la immagine e quindi passare al write() il BufferedImage.
    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 L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,755
    Originariamente inviato da andbin
    ...
    Quindi non puoi passare banalmente un Image al write(). La soluzione è creare un BufferedImage, scriverci dentro la immagine e quindi passare al write() il BufferedImage.
    EUREKA!
    questa classe funziona
    codice:
    import java.awt.*;
    import java.awt.datatransfer.*;
    import java.awt.image.*;
    import java.io.*;
    import javax.imageio.*;
    
    
    public class Clipboard2Img {
        public static void main(String[] args) {
            try {
                Clipboard clipBoard = Toolkit.getDefaultToolkit().getSystemClipboard();
    			Transferable t = clipBoard.getContents(null);
    			Image image = (Image) t.getTransferData(DataFlavor.imageFlavor);
    			
    			int width = image.getWidth(null);
                int height = image.getHeight(null);
    			//System.out.println("Immagine lunga "+ width+ " e larga "+ height+ " pixels");
    			
    			BufferedImage bi=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    			Graphics2D g2d = bi.createGraphics();
    			
    			g2d.drawImage(image, null,null);
    			
    			
                // Saves the image to a file in JPG format.
                ImageIO.write(bi , "jpg", new File("img.jpg"));
            } catch (Exception e) {
                System.err.println(e);
            }
        }
    }
    secondo te è il modo migliore o c'è di meglio?

    in ogni caso GRAZIE 1000
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da wallrider
    secondo te è il modo migliore o c'è di meglio?
    Una piccola miglioria si può fare. Da specifiche nella documentazione, come ho detto, si è solo sicuri che il Transferable ricevuto con un DataFlavor.imageFlavor fornisce un java.awt.Image. Ma è chiaro che l'oggetto è poi realmente di un sottotipo di Image. Quale sia non è scritto/garantito da nessuna parte .... se però fai una prova e stampi la classe dell'oggetto che ottieni, scoprirai che è un BufferedImage.

    Quindi l'idea è: fai un test con instanceof per vedere se è un BufferedImage. Se così, usi direttamente quello (facendo un cast). Altrimenti fai la procedura che hai scritto per creare un BufferedImage (e ricordati di fare il dispose() del Graphics!).
    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.