2010-12-29 19 views

Respuesta

13

Aquí está el código de trabajo tomados de here comprobado con

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

Usted puede conseguir lejos con el paso nulo en lugar de una implementación de ClipboardOwner. –

2

código de Jigar no almacenar en efecto un BufferedImage en el portapapeles, aunque para ser específico, se pone una captura de pantalla de toda la pantalla en el portapapeles.

Esto puede o no ser lo que estabas buscando. En caso de que quisiera copiar su propio BufferedImage específico, para lograr esto, reemplacé el constructor del ejemplo de Jigar con un método 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); 
    } 

Retire el método main() dentro de su clase también.

A continuación, puede copiar su BufferedImage con código como este:

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

Lo bueno, pero no hay necesidad de crear una clase completamente nueva allí. –

+0

Oh, espera. No importa. Si alguien más pensó como yo, tenga en cuenta que 'CopyImagetoClipBoard' es un' ClipboardOwner'. –

Cuestiones relacionadas