1

我正在尝试将 bufferedImage 保存到系统的剪贴板,基本上我的程序会截取一个区域并将其保存为 PNG,但现在我希望它也能够将该图像发送到剪贴板,

我试过了Toolkit.getDefaultToolkit().getSystemClipboard().setContents( (Transferable) myImage, null);

Eclipse 希望我将缓冲myImage的图像转换为可传输的图像,但这是不允许的,而且我在 stackOverflow 上查看的代码与我的整个程序一样长,但我未能正确使用它,所以我不知道什么是可转让的,我怎么能从我的缓冲图像中制作一个,有人能解释一下吗?

4

1 回答 1

3

您不能将 aBufferedImage转换为 a 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);
    }
};
于 2015-04-08T14:02:25.113 回答