# umwandeln BufferedImage to File



## tomstue (3. Jan 2010)

Hi zusammen

Ich habe mir aus einer ChartPanel-Grafik ein BufferedImage rausgeholt und muss dies in ein File umwandeln. Leider kann ich es nicht einfach casten

Habt ihr einen Lösungsweg für mich? Ich stocher da ziemlich im Trüben - im Netz finde ich leider nichts

Grüße


----------



## Illuvatar (3. Jan 2010)

Du musst das BufferedImage auch erstmal abspeichern. Dazu empfehle ich diese Methode:
ImageIO (Java Platform SE 6)


----------



## tomstue (3. Jan 2010)

Ja genau, zum abspeichern gibt es viele verschiedene Methoden und das ist auch kein Problem. Kann es schon aus dem ChartPanel heraus mit ChartUtilities und mittels ImageIO abspeichern - da hast du recht. Allerdings bekomme ich es dann zB durch 

File file = new File(savedImageFilePath);

nicht eingeladen oder? Damit erstelle ich doch nur ein neues File aber erhalte nicht das abgespeicherte Bild. Wie ist es sonst möglich ein abgespeichertes Bild einzuladen und dann kein Image zu erhalten sondern ein File?


----------



## Illuvatar (3. Jan 2010)

Ich versteh nicht ganz was du machen willst  File und Image sind ja erstmal zwei ziemlich verschiedene Sachen: File zeigt auf eine Datei in der Festplatte, Image repräsentiert eine Menge von Bilddaten im Arbeitsspeicher.
Mit ImageIO oder ähnlichen Klassen kannst du die Bilddaten auf die Festplatte schreiben und andersrum. Mit [c]File file = new File(savedImageFilePath);[/c] wird natürlich noch nichts eingeladen - und wenn du es mit ImageIO einlädst, hast du natürlich ein Image-Objekt und kein File-Objekt.
Wofür brauchst du denn dieses File-Objekt?


----------



## tomstue (3. Jan 2010)

Es handelt sich um eine Methode deren Rückgabewert durch ein Interface vorgegeben wird

public File MethodenName(ChartPanel)

Ich habe keine Wahl den Rückgabewert zu ändern. Ich muss in der Methode irgendwie das ChartPanel in ein File umwandeln. 

ChartPanelGrafik => BufferedImage ist erstmal kein Problem aber hilft mir noch nicht weiter. Leider kann ich das BufferedImage anscheinend nicht in ein File-Objekt umwandeln sondern muss den Umweg übers abspeichern und einladen gehen.


----------



## Der Müde Joe (3. Jan 2010)

Ein File ist nix anderes als ein Pfad. Das kann ein Verzeichnis oder eine Datei sein (darüber gibs aber bei sun auch schon diskusionen um das zu ändern). Ob die Datei/Verzeichnis nun existiert auf dem Dateisystem, ist dem File-Objekt egal (und auch der Inhalt falls eine Datei). Gibt auch die entsprechenden exist/mkdir... methoden.

Ein BufferedImage ist nichts anderes als Daten im Speicher. (siehe Illuvatar).

Und was ist jetzt das Problem. Um eine Menge Arbeitsspeicher in eine Datei auf der HD zu speichern, muss du ein File-Objekt erstellen, damit das File auf der HD erstellen, nun den Speicher ins das File drücken.
Nun hast du ein File-Object, dessen Inhalt das BufferedImage war. Wobei das File-Object interessiert das nicht. Es zeigt einfach auf das File (was auch immer es ist).
ImageIO mach etwa das.


----------



## Illuvatar (3. Jan 2010)

Und was spricht gegen

```
BufferedImage img = // ...
File imgFile = new File("...");
ImageIO.write(img, "...", imgFile);
return imgFile;
```


----------



## tomstue (3. Jan 2010)

Es muste dann doch anders gemacht werden - trotzdem danke!


----------

