1

そこで、csvファイルからグラフィカルなタイムラインを作成するアプリケーションを作成しました。私はその部分を終えました。画像を「きれい」にするための助けが必要です。画像をキャプチャすると、JFrameからの境界線もキャプチャされます。境界線がキャプチャされないようにするにはどうすればよいですか?または、どうすればそれを取り除き、画像サイズを維持できますか? ここに画像の説明を入力してください

4

2 に答える 2

2

簡単な例を次に示します。あなたのニーズを明確にするためだけに。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ですか?そうでない場合は、質問にコードを追加して、必要なことを実行しようとするかもしれません。

PSその例のソースを見つける場所を指摘してくれたDariencamickrに感謝します。多分これはコメントである必要があります。しかし、そのようなフォーマットではより明確です。

于 2011-06-11T10:09:40.230 に答える
0
BufferedImage image = (BufferedImage)createImage(getContentPane().getSize().width, getContentPane().getSize().height);
getContentPane().paint(image.getGraphics());

これこそが、私が探していたと信じているものです。

于 2011-06-13T17:32:42.657 に答える