在Java中查找剪贴板图像的格式

在Java中查找剪贴板图像的格式,java,image,clipboard,image-formats,Java,Image,Clipboard,Image Formats,我使用以下方法从剪贴板获取图像: if(Toolkit.getDefaultToolkit().getSystemClipboard().isDataFlavorAvailable(DataFlavor.imageFlavor)){ ImageIcon IMG = new ImageIcon((BufferedImage) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.imageFlavor)

我使用以下方法从剪贴板获取图像:

if(Toolkit.getDefaultToolkit().getSystemClipboard().isDataFlavorAvailable(DataFlavor.imageFlavor)){
       ImageIcon IMG = new ImageIcon((BufferedImage) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.imageFlavor));
}
现在我想用
ImageIO.write将这个图像保存在磁盘上
如何在
ImageIO.write
中找到要使用的图像格式(JPG、PNG、GIF等)作为
formatName


感谢通过检查剪贴板内容的mime类型

.isDataFlavorAvailable(DataFlavor.imageFlavor)
是(但是)

我找到了两种从剪贴板获取图像并将其写入文件的方法:

  • 使用在此博客文章中找到的帮助器方法:

    getBuffereImage
    方法如下所示:

    public static BufferedImage getBufferedImage(Image img) {
        if (img == null) {
            return null;
        }
        int w = img.getWidth(null);
        int h = img.getHeight(null);
        // draw original image to thumbnail image object and 
        // scale it to the new size on-the-fly 
        BufferedImage bufimg = new BufferedImage(w, h, 
            BufferedImage.TYPE_INT_RGB);
        Graphics2D g2 = bufimg.createGraphics();
        g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
            RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        g2.drawImage(img, 0, 0, w, h, null);
        g2.dispose();
        return bufimg;
    }
    
  • 通过可转让。请注意,这在OS X上运行,但会生成正确大小的空映像:

    Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard()
    Transferable content =
        clip.getContents(null);
    BufferedImage img = (BufferedImage) content.getTransferData(
        DataFlavor.imageFlavor);
    ImageIO.write(img, "png", new File("/tmp/test.png"));
    

  • 可能会有帮助。@Gus:不幸的是,当图像来自剪贴板时,这不起作用;
    ImageIO.getImageReaders(imageIconObject)
    返回一个空迭代器!简言之,这根本不可能。从剪贴板检索图像时,图像的格式为
    java.awt.image
    。这是Java对图像数据的表示,完全独立于该数据来自的任何图像文件的原始格式。您可以选择任何格式将映像写入磁盘。
    Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard()
    Transferable content =
        clip.getContents(null);
    BufferedImage img = (BufferedImage) content.getTransferData(
        DataFlavor.imageFlavor);
    ImageIO.write(img, "png", new File("/tmp/test.png"));