Einen Canvas in eine Bilddatei umwandeln

erdmaennchen

Grünschnabel
nachdem ich jetzt auch nach langem suchen immer noch nicht zu einer lösung gekommen bin frage ich einfach mal hier nach.

ich habe ein canvas objekt und ich müsste das ganze in eine jpeg / png datei umwandeln. kling wahrscheinlich relativ einfach - ist es vielleicht auch - aber gefunden habe ich dazu wirklich gar nix (nur ca 200 anleitungen wie es anders herum geht :) )

ich bedanke mich im vorheinein
erdmaennchen
 
Hallo!

Schau mal hier:

Code:
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
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;
import javax.swing.SwingUtilities;

public class CanvasSaver extends JFrame {

    private final Canvas canvas;

    private final JButton btnSave;

    private final BufferedImage img;

    public CanvasSaver() {
        super("CanvasSaver");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        canvas = new Canvas() {
            public void paint(Graphics g) {
                g.drawImage(img, 0, 0, this);
            }
            public void update(Graphics g){
                g.drawImage(img, 0, 0, this);
            }
        };

        canvas.addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseMoved(MouseEvent e) {
                final int x = e.getX();
                final int y = e.getY();
                
                Graphics g = img.getGraphics();
                g.setColor(Color.BLACK);
                g.drawLine(x, y, x, y);
                canvas.repaint();
            }
        });

        canvas.setSize(320, 240);

        img = new BufferedImage(320, 240, BufferedImage.TYPE_INT_RGB);
        Graphics g = img.getGraphics();
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, 320, 240);
        

        btnSave = new JButton("Save");
        btnSave.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        btnSave.setEnabled(false);
                        try {
                            ImageIO.write(img, "jpeg", new File("c:/out.jpg"));
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        }
                        btnSave.setEnabled(true);
                    }

                });
            }
        });

        getContentPane().add(canvas, BorderLayout.CENTER);
        getContentPane().add(btnSave, BorderLayout.SOUTH);

        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        new CanvasSaver();
    }
}

Gruß Tom
 
zunächst mal vielen dank!

das geht auf jeden fall in richtung dessen was ich brauche. aber wie muss ich mir das jetzt vorstellen (hatte leider noch keine zeit deinen code an mein programm anzupassen): ich zeichne auf dem canvas sagen wir mal einige linien, ein paar images noch ein paar kreise, was halt auch immer. und wenn ich diesen canvas jetzt in eine bilddatei umwandeln möchte (also halt den inhalt des canvas) kann ich den code verwenden? mir kommt es nämlich irgendwie komisch vor, dass wir ein bild malen und nicht irgendwie einem bild einen canvas zu ordnen.

ciao,
erdmaennchen
 
Zurück