2

描画した bufferedImage を新しいファイルとして保存しようとしています。ファイルを開き、graphics2d を使用してその上に描画し (次に、JFrame に画像を表示して、その動作を確認します)、新しいファイルに保存します。

問題は、保存されるファイルが元の画像だけであることです。私が描いた新しいグラフィックは含まれていません。

これが私のコードのはるかに単純化されたバージョンです:

public driver() throws IOException {
        try {
            image = ImageIO.read(new File("src/mc_map.png"));
        } catch (IOException e) { e.printStackTrace(); }
        this.setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
        image = process(image);
    }

後で別の方法で:

    g.draw(new Line2D.Double(road.start.x, road.start.y, road.end.x, road.end.y));
...
br.close();
        image.createGraphics();
        File map = new File("map.png");
        ImageIO.write(image, "png", map);

関連する方法:

private BufferedImage process(BufferedImage old) throws IOException {
        int w = old.getWidth();
        int h = old.getHeight();
        BufferedImage img = new BufferedImage(
            w, h, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2d = img.createGraphics();
        g2d.drawImage(old, 0, 0, null);
        g2d.setPaint(Color.BLUE);
        g2d.drawLine(407, 355, 371, 349);
        readAndDraw(g2d);
        g2d.dispose();
        return img;
    }

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, null);
    }

    private static void create() throws IOException {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new driver());
        f.pack();
        f.setVisible(true);
    }
4

2 に答える 2

2

次に、画像を JFrame に表示して、その動作を確認します

Screen Imageを使用して、任意のコンポーネントの BufferedImage を取得し、画像をファイルに保存します。

于 2013-05-05T21:31:08.083 に答える