Java 如何消除通过将jframe图像捕获到文件中而产生的边界?

Java 如何消除通过将jframe图像捕获到文件中而产生的边界?,java,image,swing,jframe,awtrobot,Java,Image,Swing,Jframe,Awtrobot,因此,我制作了一个应用程序,从csv文件创建一个图形时间轴。我现在已经完成了这一部分,我只需要帮助获得“漂亮”的图像。拍摄图像时,也会拍摄JFrame的边框如何使边界不被捕获?或者我如何摆脱它并保持图像大小? 下面是一个简单的例子。只是为了澄清你的需求。基于 下面的程序截取JFrame的屏幕截图并将其写入文件 import java.awt.Dimension; import java.awt.EventQueue; import java.awt.FlowLayout; import java

因此,我制作了一个应用程序,从csv文件创建一个图形时间轴。我现在已经完成了这一部分,我只需要帮助获得“漂亮”的图像。拍摄图像时,也会拍摄JFrame的边框如何使边界不被捕获?或者我如何摆脱它并保持图像大小?
下面是一个简单的例子。只是为了澄清你的需求。基于

下面的程序截取JFrame的屏幕截图并将其写入文件

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;

/* Writes self screenshot on Screenshot button click. */
public class ScreenshotFrame extends JFrame {

    public ScreenshotFrame () {
        initComponents();
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ScreenshotFrame().setVisible(true);
            }
        });
    }

    private void initComponents() {
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        JButton screenshotButton = new JButton();

        screenshotButton.setText("Screenshot");
        screenshotButton.setToolTipText("Take my screenshot.");
        screenshotButton.addActionListener(new ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                writeImageToFile(getScreenshot());
            }
        });        

        getContentPane().setLayout(new FlowLayout());
        getContentPane().add(screenshotButton);

        pack();
    }

    /* Modified method from pointed solution. */
    private BufferedImage getScreenshot() {
        Dimension dim = this.getContentPane().getSize();
        BufferedImage image =
                new BufferedImage(dim.width, dim.height, BufferedImage.TYPE_INT_RGB);
        this.getContentPane().paint(image.getGraphics());
        return image;
    }

    /* Write image to png file in current dir.*/
    private void writeImageToFile(BufferedImage image) {
        try {
            File file = new File("JFrameScreenshot.png");
            file.createNewFile();
            ImageIO.write(image, "png", file);
        } catch (IOException ex) {/*do smth*/ }
    }
}
这是你想要的吗?如果没有,也许你可以在你的问题中添加一些代码,尝试做你想做的事情

另外,感谢和,他指出了在哪里可以找到这方面的来源 例子。 也许这应该是一个评论。但这样的格式更清晰

BufferedImage image = (BufferedImage)createImage(getContentPane().getSize().width, getContentPane().getSize().height);
getContentPane().paint(image.getGraphics());

这就是我相信我一直在寻找的。

潜在的复制品:不完全是我想要的。我知道怎么拍屏幕。我想直接捕捉框架内的图像另一个问题提到“标题栏顶部有一个空白条”。。。这不是我看到的图像周围的灰色边框的一部分吗?屏幕截图并不是捕捉图像的最佳方式。这必须是可伸缩的+1@如果0等于1,它会告诉你如何捕获帧内的图像。你读了被接受的答案了吗?解决方案不需要屏幕截图。如果你想缩放图像,你可以使用image.getScaledInstance。它非常短。但是您是否介意修改您的答案,以便其他人(例如我)也可以使用它?你从哪里得到这个神奇的
createImage()
方法的?哪个类包含它,或者它里面是什么?它是JFrame从java.awt.Component继承的方法。它接收宽度和高度并返回图像。