4

これを使用してクリップボードから画像を取得しています:

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

ImageIO.write次に、;を使用してこのイメージをディスクに保存します。として
使用する画像形式(JPG、PNG、GIF、...)を見つけるにはどうすればよいですか? ImageIO.writeformatName

ありがとう

4

1 に答える 1

3

経由でチェックしたときのクリップボードのコンテンツのmimeタイプ

.isDataFlavorAvailable(DataFlavor.imageFlavor)

image/x-java-imageです(ただし、OSベンダーはクリップボードのMIMEタイプに従う必要はありません)。

クリップボードから画像を取得してファイルに書き込む方法は2つあります。

  1. このブログ投稿にあるヘルパーメソッドの使用:Javaを使用してMacOSXクリップボードから画像を取得することの悪夢

    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. 転送可能経由。これはOSXで実行されますが、正しいサイズの空のイメージが生成されることに注意してください。

    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 に答える