Aktuell habe ich ein Problem welches ich schon seit einger Zeit versuche zu lösen aber nicht mehr weiter weis.
In einer Variable bild vom Typ Image liegt der Inhalt im Speicher.
Das Bild wird auf Festplatte gespeichert und kann es mir auch ansehen.
Jetzt habe ich eine weitere Methode, die Bilder Skallieren soll
Wenn ich ein Bild habe welches im Original 1200x1200 Pixel, gross ist und ich die Methode wie folgt aufrufe
Erhalte ich folgendes in der Konsole
Ich vermute, das es nicht geschrieben wurde. Dann habe ich die Speichern Methode erweitert mit der existenzprüfung und habe richtig vermutet, das Bild wurde nicht geschrieben.
Ein Bild welches unter 600x600 liegt wie 500x500, wurde von der Skallieren methode nicht verändert und unbearbeitet zurück gegeben. Dieses wurde auch ordnungsgemäss auf Festplatte gespeichert. Bilder die grösser sind als 600x600 wurden skalliert, und laut Konsolenausgabe sind diese nicht null oder leer und haben auch die richtige Breite und Höhe 600x600 aber lassen sich irgendwie nicht speichern???
Hat jemand eine Idee woran das liegen kann?
Mein Projekt ist meine Methoden-Bibliothek welches JavaFX 20 enthält aber keine grafische Oberfläche.
In diesem Projekt schreibe ich hauptsächlich Methoden die ohne Oberfläche arbeiten.
Vielen Dank
In einer Variable bild vom Typ Image liegt der Inhalt im Speicher.
Java:
public static void speichernBild(Image bild, String dateiname) {
try {
BufferedImage bufferedImage = SwingFXUtils.fromFXImage(bild, null);
if (bufferedImage != null)
System.out.println("Das Buffered Image ist nicht leer");
File output = new File(dateiname);
System.out.println("Der Dateiname : " + dateiname);
ImageIO.write(bufferedImage, "jpg", output);
if (new File(dateiname).exists()){
System.out.println("Das Bild wurde gespeichert : " + dateiname);
} else{
System.out.println("Das Bild wurde nicht gespeichert");
}
} catch (IOException e) {
e.printStackTrace();
}
} // speichernBild
Das Bild wird auf Festplatte gespeichert und kann es mir auch ansehen.
Jetzt habe ich eine weitere Methode, die Bilder Skallieren soll
Code:
public static Image skaliereBild(Image bild, int maximaleBreite, int maximaleHöhe) {
int ursprünglicheBreite = (int) bild.getWidth();
int ursprünglicheHöhe = (int) bild.getHeight();
// Überprüfen, ob eine Skalierung erforderlich ist
if (ursprünglicheBreite <= maximaleBreite && ursprünglicheHöhe <= maximaleHöhe) {
return bild; // Keine Skalierung erforderlich
}
// Berechnen der Skalierungsfaktoren
double faktorBreite = (double) maximaleBreite / ursprünglicheBreite;
double faktorHöhe = (double) maximaleHöhe / ursprünglicheHöhe;
double skalierungsfaktor = Math.min(faktorBreite, faktorHöhe);
// Skalieren des Bildes
int neueBreite = (int) (ursprünglicheBreite * skalierungsfaktor);
int neueHöhe = (int) (ursprünglicheHöhe * skalierungsfaktor);
BufferedImage skaliertesBufferedImage = new BufferedImage(neueBreite, neueHöhe, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = skaliertesBufferedImage.createGraphics();
g2d.drawImage(SwingFXUtils.fromFXImage(bild, null), 0, 0, neueBreite, neueHöhe, null);
g2d.dispose();
return SwingFXUtils.toFXImage(skaliertesBufferedImage, null);
}
Wenn ich ein Bild habe welches im Original 1200x1200 Pixel, gross ist und ich die Methode wie folgt aufrufe
Code:
Image skaliertesBild = Bild.skaliereBild(coverBild, 600, 600);
if (skaliertesBild != null) {
System.out.println("Das Skallierte Bild ist nicht null");
int breite = (int) skaliertesBild.getWidth();
int hoehe = (int) skaliertesBild.getHeight();
System.out.println("Das Bild hat die Größe: " + breite + "x" + hoehe);
} else {
System.out.println("Das Skallierte Bild ist null");
}
Erhalte ich folgendes in der Konsole
Allerdings wird die gespeicherte Datei nirgends auf der Festplatte gefunden.Das Skallierte Bild ist nicht null
Das Bild hat die Größe: 600x600
Das Buffered Image ist nicht leer
Das Bild wurde gespeichert : D:\temp\CoverBild_skaliert.jpg
Ich vermute, das es nicht geschrieben wurde. Dann habe ich die Speichern Methode erweitert mit der existenzprüfung und habe richtig vermutet, das Bild wurde nicht geschrieben.
Ein Bild welches unter 600x600 liegt wie 500x500, wurde von der Skallieren methode nicht verändert und unbearbeitet zurück gegeben. Dieses wurde auch ordnungsgemäss auf Festplatte gespeichert. Bilder die grösser sind als 600x600 wurden skalliert, und laut Konsolenausgabe sind diese nicht null oder leer und haben auch die richtige Breite und Höhe 600x600 aber lassen sich irgendwie nicht speichern???
Hat jemand eine Idee woran das liegen kann?
Mein Projekt ist meine Methoden-Bibliothek welches JavaFX 20 enthält aber keine grafische Oberfläche.
In diesem Projekt schreibe ich hauptsächlich Methoden die ohne Oberfläche arbeiten.
Vielen Dank
Zuletzt bearbeitet: