为什么我不能将缓冲图像转换为可传输对象以将其发送到剪贴板?

时间:2015-04-08 09:50:58

标签: java clipboard bufferedimage transferable

我试图将bufferedImage保存到我的系统剪贴板,基本上我的程序会对某个区域进行屏幕捕获并将其保存为PNG,但现在我希望它能够将该图像发送到剪贴板,

我已尝试使用Toolkit.getDefaultToolkit().getSystemClipboard().setContents( (Transferable) myImage, null);

Eclipse希望我将缓冲的myImage图像转换为可转移的图像,但不允许这样做,而且我在stackOverflow上看到的关于此问题的代码与我的一样长。整个程序,我没有正确使用它,所以我不确定什么是可转让的,我怎么能用我的缓冲图像制作一个,有人会解释一下吗?

1 个答案:

答案 0 :(得分:3)

您无法将BufferedImage投射到Transferable(因为它们是不同的类型)。

但是,您可以轻松地将图像打包成Transferable,如下所示:

Toolkit.getDefaultToolkit()
        .getSystemClipboard()
        .setContents(new ImageTransferable(myImage), null);

static final class ImageTransferable {
    final BufferedImage image;

    public ImageTransferable(final BufferedImage image) {
        this.image = image;
    }

    @Override
    public DataFlavor[] getTransferDataFlavors() {
        return new DataFlavor[] {DataFlavor.imageFlavor};
    }

    @Override
    public boolean isDataFlavorSupported(final DataFlavor flavor) {
        return DataFlavor.imageFlavor.equals(flavor);
    }

    @Override
    public Object getTransferData(final DataFlavor flavor) throws UnsupportedFlavorException, IOException {
        if (isDataFlavorSupported(flavor)) {
            return image;
        }

        throw new UnsupportedFlavorException(flavor);
    }
};