# Java2d Bild als JPG oder so speichern



## Krause (7. Jan 2004)

Hallo,
wie kann man ein Java2D Bild, oder eigentlich etwas was mit der Methode paint erzeugt wird, in eine JPG (oder ähnliches) speichern?

Finde dazu nichts im Netz :-(

Hoffentlich kannmir jemand helfen

Danke

Krause


----------



## Oxygenic (7. Jan 2004)

Das Speichern von Formaten mußt du in der Regel selber implementieren. Für PNG findest du hier was: http://www.3dchat.org/dev.php ( http://www.3dchat.org/doc/com/vwp/awt/image/ImagePNGData.html ).


----------



## mariopetr (7. Jan 2004)

geht relativ einfach (ab 1.3)


```
ImageWriter writer=(ImageWriter)ImageIO.getImageWritersByMIMEType("image/jpeg").next();
ImageOutputStream stream=ImageIO.createImageOutputStream(new File("/tmp/test.jpg"));
writer.setOutput(stream);
writer.write(myImage);
```


----------



## Oxygenic (7. Jan 2004)

```
getImageWritersByMIMEType("image/jpeg")
```

Nett! Ich sollte wohl doch langsam 1.3 als Mindestvoraussetzung hernehmen. Gibt es auch eine Variante "image/png"?


----------



## mariopetr (7. Jan 2004)

natuerlich, im allgemeinen werden unterstuetzt
known input mimeTypes
0:image/png
1:image/jpeg
2:image/x-png
3:image/vnd.wap.wbmp
4:image/bmp
5:image/gif
known output mimeTypes
0:image/png
1:image/jpeg
2:image/x-png
3:image/vnd.wap.wbmp
4:image/bmp

fuer dein System bekommst du das ueber

```
ImageIO.getWriterMIMETypes();
ImageIO.getReaderMIMETypes();
```


----------



## Oxygenic (7. Jan 2004)

Prima, da kann ich die olle PNG-Klasse ja doch langsam mal in den IT-Orkus schicken


----------



## Krause (8. Jan 2004)

Mhh, sieht ja leicht aus,
aber was ist  hierbei denn  
	
	
	
	





```
writer.write(myImage);
```
  myImage?

Ist das die Klasse, in der die Paint Methode ist?
Oder eher gefragt kann ich da ne Klasse in der eine Paint Methode ist angeben?

Danke

Krause


----------



## mariopetr (8. Jan 2004)

myIMage ist eine beliebige instanz von javax.imageio.IIOImage.

wenn man jetzt eine komplette komponente in ein bild speichern will, erstellt man ein neues image und ruft paintComponent mit image.getGraphics() auf


----------



## Krause (8. Jan 2004)

Hast du dazu vielleicht mal ein kurzes Beispiel?

Sagen wir mal ich will die Klasse Bild, welche eine paint Methode besitzt in ein JPG Bild speichern, wie gehe ich da vor?

Danke schonmal

Krause[/quote]


----------



## mariopetr (9. Jan 2004)

mal unter der annahme das deine klasse von Component erbt
(ohne test, ein paar fehler werden wohl drin sein)

```
public static Image ComponentShot(Component component) throws Exception
{
	Rectangle rect=component.getBounds();
	GraphicsConfiguration configuration=GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
		BufferedImage image=configuration.createCompatibleImage(rect.width,rect.height,Transparency.TRANSLUCENT);
	
	//kommt drauf an, ich denke paintAll ist besser als paint
	component.paintAll(image.getGraphics());
	return image;
}
```


----------



## Oxygenic (13. Jan 2004)

Kleine Korrektur: Java 1.3 kennt die Klasse ImageWriter noch nicht.


----------

