Как избавиться от границы, сделанной путем захвата изображения jframe в файл? - PullRequest
1 голос
/ 11 июня 2011

Итак, я сделал приложение, которое создает графическую временную шкалу из CSV-файла.Я закончил эту часть, теперь мне просто нужна помощь, чтобы сделать изображение "красивым".При захвате изображения также захватывается рамка из JFrame! Как сделать так, чтобы граница не была захвачена?Или как мне от этого избавиться и сохранить размер изображения? enter image description here

Ответы [ 2 ]

2 голосов
/ 11 июня 2011

Вот простой пример. Просто чтобы уточнить ваши потребности. Основано на решении Как удалить строку заголовка со снимка экрана 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*/ }
    }
}

Это то, что вы хотите, if_zero_equals_one ? Если нет, возможно, вы могли бы добавить код к вашему вопросу, который пытается сделать то, что вы хотите.

P.S. Спасибо Darien и camickr , которые указали, где найти источник для этого пример. Может быть, это должен быть комментарий. Но с таким форматированием все понятнее.

0 голосов
/ 13 июня 2011
BufferedImage image = (BufferedImage)createImage(getContentPane().getSize().width, getContentPane().getSize().height);
getContentPane().paint(image.getGraphics());

Это то, что, как мне кажется, я искал.

...