将BufferedImage复制到剪贴板

如何将BufferedImage存储到系统剪贴板中?

以下是从这里成功测试的工作代码

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; } } } 

Jigar的代码确实将BufferedImage存储到剪贴板中,但具体来说,它将整个屏幕的屏幕捕获放入剪贴板。

这可能是也可能不是你所追求的。 如果你想复制你自己的特定BufferedImage ,为了实现这一点,我用一个copyImage()方法替换了Jigar示例中的构造函数。

 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);