2010-12-29 33 views

risposta

13

Ecco il codice di lavoro tratto da here testati con successo

package org.life.java.so.questions; 

/** 
* @author Jigar 
*/ 
import java.awt.*; 
import java.awt.datatransfer.*; 
import java.awt.image.*; 
import java.io.*; 

public class CopyImagetoClipBoard implements ClipboardOwner { 
    public CopyImagetoClipBoard() { 
     try { 
      Robot robot = new Robot(); 
      Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
      Rectangle screen = new Rectangle(screenSize); 
      BufferedImage i = robot.createScreenCapture(screen); 
      TransferableImage trans = new TransferableImage(i); 
      Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); 
      c.setContents(trans, this); 
     } 
     catch (AWTException x) { 
      x.printStackTrace(); 
      System.exit(1); 
     } 
    } 

    public static void main(String[] arg) { 
     CopyImagetoClipBoard ci = new CopyImagetoClipBoard(); 
    } 

    public void lostOwnership(Clipboard clip, Transferable trans) { 
     System.out.println("Lost Clipboard Ownership"); 
    } 

    private class TransferableImage implements Transferable { 

     Image i; 

     public TransferableImage(Image i) { 
      this.i = i; 
     } 

     public Object getTransferData(DataFlavor flavor) 
     throws UnsupportedFlavorException, IOException { 
      if (flavor.equals(DataFlavor.imageFlavor) && i != null) { 
       return i; 
      } 
      else { 
       throw new UnsupportedFlavorException(flavor); 
      } 
     } 

     public DataFlavor[] getTransferDataFlavors() { 
      DataFlavor[] flavors = new DataFlavor[ 1 ]; 
      flavors[ 0 ] = DataFlavor.imageFlavor; 
      return flavors; 
     } 

     public boolean isDataFlavorSupported(DataFlavor flavor) { 
      DataFlavor[] flavors = getTransferDataFlavors(); 
      for (int i = 0; i < flavors.length; i++) { 
       if (flavor.equals(flavors[ i ])) { 
        return true; 
       } 
      } 

      return false; 
     } 
    } 
} 
+0

Si può ottenere via con il passare nulla, invece di un'implementazione di ClipboardOwner. –

2

codice di Jigar fa infatti memorizzare un BufferedImage negli appunti, anche se per essere precisi, si pone uno screen-capture di tutto lo schermo negli appunti.

Questo potrebbe o non potrebbe essere quello che cercavi. Nel caso in cui volessi copiare il tuo specifico BufferedImage, per fare ciò, ho sostituito il costruttore dell'esempio di Jigar con un metodo copyImage().

public class CopyImagetoClipBoard implements ClipboardOwner 
{ 
    public void copyImage(BufferedImage bi) 
    { 
     TransferableImage trans = new TransferableImage(bi); 
     Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); 
     c.setContents(trans, this); 
    } 

Rimuovere il metodo main() entro la sua classe anche.

È quindi possibile copiare il BufferedImage con codice come questo:

BufferedImage bim; 
    // set bim to your desired BufferedImage content 
    // ... 
    CopyImagetoClipBoard ci = new CopyImagetoClipBoard(); 
    ci.copyImage(bim); 
+1

Roba buona, ma non c'è bisogno di creare una classe completamente nuova lì. –

+0

Oh, aspetta. Non importa. Se qualcun altro ha pensato come me, nota che 'CopiaImagetoClipBoard' è un 'ClipboardOwner'. –

Problemi correlati