0

ボタンのクリック時に基本的な描画を保存する簡単な描画プログラムを作成しようとしています。教科書から描画方法をコピーしました。いじっているだけです。これは私が作成したバッファリングされた画像です:

private static BufferedImage bi = new BufferedImage(500, 500,
        BufferedImage.TYPE_INT_RGB);

これにより、ペイント パネルが作成されます。

public PaintPanel() {

    addMouseMotionListener(

    new MouseMotionAdapter() {
        public void mouseDragged(MouseEvent event) {
            if (pointCount < points.length) {
                points[pointCount] = event.getPoint();
                ++pointCount;
                repaint();
            }
        }
    });
}

public void paintComponent(Graphics g) {

    super.paintComponent(g);

    for (int i = 0; i < pointCount; i++)
        g.fillOval(points[i].x, points[i].y, 4, 4);
}

ボタンをクリックすると:

save.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            PaintPanel.saveImage();
            System.exit(0);
        }

私はこのメソッドを呼び出します:

public static void saveImage() {

    try {
        ImageIO.write(bi, "png", new File("test.png"));
    } catch (IOException ioe) {
        System.out.println("Eek");
        ioe.printStackTrace();
    }

}

しかし、保存したpngファイルはただの黒です。

4

1 に答える 1

2

BufferedImageand パネル コンポーネントには、2 つの異なるオブジェクトGraphicsがあります。Graphicsしたがって、前者のオブジェクトを明示的に更新する必要があります。

Graphics graphics = bi.getGraphics();
for (int i = 0; i < pointCount; i++) {
    graphics.fillOval(points[i].x, points[i].y, 4, 4);
}
于 2013-10-17T20:28:54.963 に答える