java - 允许用户在 Java Swing 应用程序中复制图像?

标签 java image swing

我一直在从事一个 java swing 项目,该项目涉及解析文本数据,然后通过本地镜像文件显示图形表示。我希望用户能够复制显示的图像,以便将它们粘贴到其他程序(例如 Microsoft Word)中。它甚至不需要这样发生,只要我可以复制 .jpg 文件,以便用户可以将它们粘贴到其他地方即可。会有一长串图像,因此一次只复制和粘贴一个是不可能的。请帮忙!

最佳答案

所以,我很快就把它组合在一起,它对我来说效果很好。

基本上,您应该能够“导出”任何基于 java.awt.Image 的图像,包括 BufferedImage

已更新,现在改进了拼接...

import java.awt.Graphics2D;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
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;
import javax.imageio.ImageIO;

public class ImageTransfer {

    public static void main(String[] args) {
        try {
            BufferedImage left = ImageIO.read(new File("left"));
            BufferedImage right = ImageIO.read(new File("right"));

            BufferedImage img = new BufferedImage(
                    left.getWidth() + right.getWidth(),
                    Math.max(left.getHeight(), right.getHeight()),
                    BufferedImage.TYPE_INT_ARGB);
            Graphics2D g2d = img.createGraphics();
            g2d.drawImage(left, 0, (img.getHeight() - left.getHeight()) / 2, null);
            g2d.drawImage(right, left.getWidth(), (img.getHeight() - right.getHeight()) / 2, null);
            g2d.dispose();

            final Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
            cb.setContents(new ImageTransferable(img), new ClipboardOwner() {
                @Override
                public void lostOwnership(Clipboard clipboard, Transferable contents) {
                    System.out.println("You Lose");
                }
            });
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public static class ImageTransferable implements Transferable {

        private BufferedImage img;

        public ImageTransferable(BufferedImage img) {
            this.img = img;
        }

        @Override
        public DataFlavor[] getTransferDataFlavors() {
            return new DataFlavor[]{DataFlavor.imageFlavor};
        }

        @Override
        public boolean isDataFlavorSupported(DataFlavor flavor) {
            return DataFlavor.imageFlavor.equals(flavor);
        }

        @Override
        public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
            if (!isDataFlavorSupported(flavor)) {
                throw new UnsupportedFlavorException(flavor);
            }
            return img;
        }

    }

}

注意,当我从文件加载图像时,图像也可以在内存中动态创建,并且它应该可以正常工作......

看看Writing/Saving an Image , Reading/Loading an ImageDrag and Drop and Data Transfer了解更多详情

关于java - 允许用户在 Java Swing 应用程序中复制图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22447824/

相关文章:

java - 需要帮助让图像在自上而下的射击游戏中旋转以面向鼠标(Java)

java - 将 XSD 解析为树结构

java - Swing TextArea 函数 setLineWrap 使执行变慢

java - Java 集合中的奇怪结果

java - Eclipse:抑制, "cannot be resolved to a type"

java - 在 Android Wear & Mobile 中读取本地 Json 数据文件

c# - 在 C# 中从 byte[] 创建图像时参数无效错误

java - 递归输出

c# - 如何将 System.Windows.Controls.Image 存储到本地磁盘

java - 将 Unicode 字符旋转 90 度