import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class ImageClipboardTest {

    public static void main(String[] args) throws Exception {
        BufferedImage bi = ImageIO.read(new File("test.png"));

        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new ImageTransferable(bi), null);
    }

    public static class ImageTransferable implements Transferable {
        private final BufferedImage image;

        public ImageTransferable(BufferedImage image) {
            this.image = image;
        }

        @Override
        public DataFlavor[] getTransferDataFlavors() {
            return new DataFlavor[] {DataFlavor.imageFlavor};
        }

        @Override
        public boolean isDataFlavorSupported(DataFlavor flavor) {
            return flavor == DataFlavor.imageFlavor;
        }

        @Override
        public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
            if (flavor != DataFlavor.imageFlavor) throw new UnsupportedFlavorException(flavor);
            return image;
        }
    }

} 