Почему я не могу преобразовать буферизованное изображение в передаваемый объект, чтобы отправить его в буфер обмена?

Я пытаюсь сохранить bufferedImage в буфер обмена моей системы, в основном моя программа делает снимок экрана с областью и сохраняет его в формате PNG, но теперь я бы хотел, чтобы это изображение также можно было отправлять в буфер обмена,

Я пробовал с Toolkit.getDefaultToolkit().getSystemClipboard().setContents( (Transferable) myImage, null);

Затмение хочет, чтобы я бросил свой буфер myImage изображение в передаваемую, но это не разрешено, и код, который я просмотрел в stackOverflow по этому вопросу, примерно такой же, как и вся моя программа, я не смог использовать его должным образом, поэтому я не уверен, что такое передаваемая часть, и Как я могу сделать один из моего буферизованного изображения, кто-нибудь объяснит?

1 ответ

Решение

Вы не можете разыграть 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);
    }
};
Другие вопросы по тегам