2010-12-29 4 views

ответ

13

Вот рабочий код взят из here успешно протестирована

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

Вы можете уйти с переходом нуль вместо реализации ClipboardOwner. –

2

код Jigar в действительно хранить BufferedImage в буфер обмена, хотя быть конкретным, он ставит экран-захват всего экрана в буфер обмена.

Возможно, это может быть и не так. Если вы хотите скопировать свой собственный конкретный BufferedImage, для этого я заменил конструктор из примера Jigar на метод 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); 
    } 

Избегайте метода main() в его классе.

Вы можете скопировать BufferedImage с кодом, например, как это:

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

Хороший материал, но нет необходимости создавать там целый новый класс. –

+0

Ой, подождите. Неважно. Если кто-то еще подумал, как я, обратите внимание, что 'CopyImagetoClipBoard' является' ClipboardOwner'. –

Смежные вопросы