Hallo Java-Community,
was ich machen möchte:
Ich habe eine PNG-Datei, diese zeichne ich mittels drawImage mehrfach auf unterschiedliche Stellen im BufferedImage. Ich möchte dies aber nur tun, wenn dieser Prozess nicht schon gewesen ist.
Also schaue ich ob das BufferedImage schon erzeugt wurde.
Wenn ja, dann möchte ich es einfach nur zurückgeben.
Das Problem:
Wenn ich es dann nur zurückgebe, ohne das Buffered image "neu zu erstellen" sehe ich es nicht mehr.
Wenn ich es immer wieder "neu erstelle" funktioniert es.
Ich verstehe einfach nicht warum, diese Information steckt doch in dem Objekt und geht nicht verloren -.-.
Ich habe auch mal alle Objekt spezifischen Informationen bei beiden Varianten (Ersterstellung, und spätere Verwendung) verglichen. Diese sind identisch!
Hier 3 Codeauszüge:
Die Klasse die im endeffekt auf das Frame Zeichnet
und jetzt am Ende so wie es funktioniert aber nicht machen will, weil man schon merkt das es sehr belastend ist ^^
Ich habe alles auch ohne BufferedImage, also mit nur "Image" versucht.
Führt zum selben ergebnis. getGraphics() und createGraphics() (nur bei BufferedImage) bringt auch nichts.
Ich habe die Idee und den Code einfach auf das Minimum begrenzt, um das Problem zu konkretisieren.
Ich bin mir bei dem Kernproblem sicher, ich kann es mir nur nicht erklären.
was ich machen möchte:
Ich habe eine PNG-Datei, diese zeichne ich mittels drawImage mehrfach auf unterschiedliche Stellen im BufferedImage. Ich möchte dies aber nur tun, wenn dieser Prozess nicht schon gewesen ist.
Also schaue ich ob das BufferedImage schon erzeugt wurde.
Wenn ja, dann möchte ich es einfach nur zurückgeben.
Das Problem:
Wenn ich es dann nur zurückgebe, ohne das Buffered image "neu zu erstellen" sehe ich es nicht mehr.
Wenn ich es immer wieder "neu erstelle" funktioniert es.
Ich verstehe einfach nicht warum, diese Information steckt doch in dem Objekt und geht nicht verloren -.-.
Ich habe auch mal alle Objekt spezifischen Informationen bei beiden Varianten (Ersterstellung, und spätere Verwendung) verglichen. Diese sind identisch!
Hier 3 Codeauszüge:
Java:
private Image image;
private BufferedImage multipliImage;
public Image getMultipliImageBySize(Dimension size)
{
if(multipliImage == null)
{
multipliImage = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_ARGB);
Graphics multipliImageGraphics = multipliImage.getGraphics();
multipliImageGraphics.drawImage(image, 20, 0, null);
multipliImageGraphics.drawImage(image, 180, 200, null);
}
return multipliImage;
}
Die Klasse die im endeffekt auf das Frame Zeichnet
Java:
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
..............................
else if(pictureMode == PICTURE_MODE_MULTIPLI)
{
g.drawImage(picture.getMultipliImageBySize(this.getSize()), 0,0,this);
}
..............................
}
und jetzt am Ende so wie es funktioniert aber nicht machen will, weil man schon merkt das es sehr belastend ist ^^
Java:
public Image getMultipliImageBySize(Dimension size)
{
multipliImage = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_ARGB);
Graphics multipliImageGraphics = multipliImage.getGraphics();
multipliImageGraphics.drawImage(image, 20, 0, null);
multipliImageGraphics.drawImage(image, 180, 200, null);
return multipliImage;
}
Ich habe alles auch ohne BufferedImage, also mit nur "Image" versucht.
Führt zum selben ergebnis. getGraphics() und createGraphics() (nur bei BufferedImage) bringt auch nichts.
Ich habe die Idee und den Code einfach auf das Minimum begrenzt, um das Problem zu konkretisieren.
Ich bin mir bei dem Kernproblem sicher, ich kann es mir nur nicht erklären.
Zuletzt bearbeitet: