4

我正在使用此从剪贴板获取图像:

if(Toolkit.getDefaultToolkit().getSystemClipboard().isDataFlavorAvailable(DataFlavor.imageFlavor)){
       ImageIcon IMG = new ImageIcon((BufferedImage) Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.imageFlavor));
}

现在我想使用ImageIO.write;将此图像保存在磁盘中
如何找到要在ImageIO.writeas中使用的图像格式(JPG、PNG、GIF、...) formatName

谢谢

4

1 回答 1

3

通过检查时剪贴板内容的 MIME 类型

.isDataFlavorAvailable(DataFlavor.imageFlavor)

image/x-java-image(但操作系统供应商不需要遵循剪贴板的 MIME 类型)。

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

  1. 使用这篇博文中的帮助方法:使用 Java 从 Mac OS X 剪贴板获取图像的噩梦

    Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard()
    
    ImageIcon IMG = new ImageIcon((BufferedImage)    
    clip.getData(DataFlavor.imageFlavor));
    BufferedImage bImage = getBufferedImage(IMG.getImage());
    ImageIO.write(bImage, "png", new File("/tmp/test.png"));
    

    getBufferedImage方法如下所示:

    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;
    }
    
  2. 通过可转让。请注意,这在 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"));
    
于 2013-01-02T21:55:48.520 回答