Bilder bzw. Dateien speichern!

Whizzle

Mitglied
Hallo!
Schreibe gerade ein Projekt für die Uni. Es soll ein Malprogramm werden.
Meine Frage ist jetzt, wie ich das gemalte Bild als gif oder jpg mit Hilfe eines fileDialogs speichern kan? Habe bis jetzt folgenden Quelltext...

FileDialog d = new FileDialog(this, "Bild speichern",
FileDialog.SAVE);
d.setFile( "*.jpg;*.gif" );
dlg.setVisible(true);

...und weiß nicht, welche Befehle jetzt folgen müssen!
Wäre für Hilfe sehr dankbar

MfG
 
Hallo!

versuch mal folgendes:

Code:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;

import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JPanel;

/*
 * MyPaint.java
 *
 * Created on 17. März 2004, 10:10
 */

/**
 *
 * @author  Darimont
 */
public class MyPaint extends javax.swing.JFrame {
	private Image img;
	private JFileChooser chooser;
	/** Creates new form MyPaint */
	public MyPaint() {
		initComponents();
	}

	/** This method is called from within the constructor to
	 * initialize the form.
	 * WARNING: Do NOT modify this code. The content of this method is
	 * always regenerated by the Form Editor.
	 */
	private void initComponents() {
		java.awt.GridBagConstraints gridBagConstraints;

		paintPanel = new PaintPanel();
		btnPanel = new javax.swing.JPanel();
		btnSave = new javax.swing.JButton();

		getContentPane().setLayout(new java.awt.GridBagLayout());

		addWindowListener(new java.awt.event.WindowAdapter() {
			public void windowClosing(java.awt.event.WindowEvent evt) {
				exitForm(evt);
			}
		});

		paintPanel.setBackground(new java.awt.Color(0, 153, 255));
		paintPanel.setMinimumSize(new java.awt.Dimension(320, 240));
		paintPanel.setPreferredSize(new java.awt.Dimension(320, 240));
		paintPanel
			.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
			public void mouseMoved(java.awt.event.MouseEvent evt) {
				jPanel1MouseMoved(evt);
			}
		});

		getContentPane().add(paintPanel, new java.awt.GridBagConstraints());

		btnPanel.setBackground(new java.awt.Color(255, 153, 51));
		btnPanel.setMinimumSize(new java.awt.Dimension(320, 100));
		btnPanel.setPreferredSize(new java.awt.Dimension(320, 100));
		btnSave.setText("save");
		btnSave.addMouseListener(new java.awt.event.MouseAdapter() {
			public void mousePressed(java.awt.event.MouseEvent evt) {
				jButton1MousePressed(evt);
			}
		});

		btnPanel.add(btnSave);

		gridBagConstraints = new java.awt.GridBagConstraints();
		gridBagConstraints.gridx = 0;
		gridBagConstraints.gridy = 1;
		getContentPane().add(btnPanel, gridBagConstraints);

		pack();
		setVisible(true);

		img = createImage(320, 240);
		paintPanel.setImg(img);

		chooser = new JFileChooser();
	}

	private void jPanel1MouseMoved(java.awt.event.MouseEvent evt) {
		// Add your handling code here:
		int x = evt.getX();
		int y = evt.getY();
		if (img != null) {
			img.getGraphics().drawLine(x, y, x, y);
			paintPanel.repaint();
		}

	}

	private void jButton1MousePressed(java.awt.event.MouseEvent evt) {
		// Add your handling code here:

		chooser.showDialog(this, "Ok");
		File file = chooser.getSelectedFile();
		try {
		ImageIO.write((RenderedImage) img, "jpeg", file);
		
			System.out.println(file.toURL());
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	/** Exit the Application */
	private void exitForm(java.awt.event.WindowEvent evt) {
		System.exit(0);
	}

	/**
	 * @param args the command line arguments
	 */
	public static void main(String args[]) {
		new MyPaint();
	}

	// Variables declaration - do not modify
	private javax.swing.JButton btnSave;
	private PaintPanel paintPanel;
	private javax.swing.JPanel btnPanel;
	// End of variables declaration

	class PaintPanel extends JPanel {

		private Image img;
		public PaintPanel() {

		}

		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			if (img != null)
				g.drawImage(img, 0, 0, this);
		}

		/**
		 * @return
		 */
		public Image getImg() {
			return img;
		}

		/**
		 * @param image
		 */
		public void setImg(Image image) {
			img = image;
		}

	}
}

Für ImageIO.read und ImageIO.write -> formatName
Supported read formats: jpeg gif JPG png jpg JPEG
Supported write formats: jpeg png JPG PNG jpg JPEG

Einfach beim JFileChooser ein Verzeichniss auswählen, dann einen Dateinamen eingaben und auf OK klicken.

Gruß Tom
 

Anhänge

  • sample.png
    sample.png
    3,2 KB · Aufrufe: 159
Hey Tom, DANKE
Das hat mir schon echt weitergeholfen, wie hast du das nur so schnell gemacht?
Muss nur noch rausfinden, welches die expliziten Befehle zum speichern sind, und dann übertragen, aber das kriege ich schon hin.
Vielen Dank nochmal...
Patrick
 
Hallo!

Die Klasse ImageIO im Package javax.imageio
verlangt bei der Methode write(RenderedImage im, String formatName, File output)
immer einen Formatnamen. Diese sind als Konstanten definert...
damit du weißt welche das sind hab ich sie mitgepostet.

Daran erkennst du auch, welche Formate ImageIO verarbeiten kan...

Gruß Tom
 
Hi,
bin sehr an deiner Lösung zum Speichern von Bildern interessiert.
Doch leider klappt sie bei mir nicht, da sie eine ClassCastException auslöst bei folgender Zeile:
ImageIO.write((RenderedImage) img, "jpeg", file);

Ist auch nachvollziehbar, da java.awt.Image das Interface RenderedImage nicht implementiert, sondern nur die unter Klasse BufferedImage.
Nur wie bekomme ich aus einem java.awt.Image ein java.awt.image.BufferedImage?

Gruß,
Scope5
 
Zurück