Re/paint() - Laden eines Images

Hallo an alle,

ich bin gerade dabei ein Mandelbrotprogramm zu programmieren!
Dabei muss ich jedes Pixel einzel überprüfen und schauen ob es in der sogenannten Mandelbrotmenge liegt! Also wird Pixel für Pixel das komplette Bild ergänzt!
Desweitern habe ich in dem Frame ein InternalFrame!
Nun zu meinem Problem: Jetzt wird das Bild vollständig ergänzt, danach wird der InternalFrame geöffnet (InternalFrame ist die Farbpalette)! Jetzt “übermalt” mir der InternalFrame das komplett gezeichnete Bild! Soll ich nun nach dem Zeichnen der Mandelbrotmenge ein “Screenshot” machen, der in die Repaint Methode eingefügt wird? Oder werde ich dann weiterhin das Problem haben? Was gibt es für Lösungsvorschläge?

Ich bin dankebar für jeden Tipp!
Das Programm sollte nächste Woche fertig sein, da ich es für meine Prüfung benötige!

Einen Screenshot zu machen … wäre etwas … frickelig-fummelig-murksig… Du kannst stattdessen ein BufferedImage verwenden:

// Erstellen
BufferedImage image = new BufferedImage(BufferedImage.TYPE_INT_RGB, 800, 600);
...

// Pixel setzen
image.setRGB(321,123, pixel);
...

// Zeichnen in der paintComponent:
g.drawImage(image, 0, 0, this);

Das kann man dann mit ImageIO auch praktischerweise gleich als JPG oder PNG speichern :slight_smile:

Danke für die schnelle Antwort,

Genau mit dem Buffered Image hatte ich es probiert… deswegen war das Screenshot in Anführungszeichen geschrieben! War mir aber nicht sicher ob das der richtige Weg ist…
Reicht es vollkommen, wenn ich dieses “drawImage” in die paint() schreibe? Kann ich das Internal Frame dann ohne weiteres darüber verschieben, ohne dass dieses meine bereits Gezeichnetes wieder löscht? Ich glaube ich habe die Funktion der paint() noch nicht ganz verstanden…

Bei dem setRGB hab ich den x und den y Wert? Jedoch ist der RGB Wert ein int? Das versteh ich nicht ganz! Bis jetzt hab ich die Farben immer vom Typ Color übergeben!

Nun, das Bild ist erstmal nur ein Bild. Um es zu zeichnen kann man z.B. ein JPanel verwenden

class JPanelWithImage extends JPanel
{
    private BufferedImage image;

    public JPanelWithImage(BufferedImage image)
    {
        this.image = image;
    }

    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, this);
    }
}

Bei setRGB gibt’s x und y, ja. Und das ‘rgb’ ist ein int, der den Pixel beschreibt. Der besteht aus dem R, G und B-Anteil, der da munterzusammengeshiftet und geORt wurde. Wenn du schon ein “Color”-Objekt hast, kannst du einfach
bufferedImage.setRGB(x,y, color.getRGB());
machen. Ggf. wäre es effizienter, nicht für jeden Pixel ein Color-Objekt zu erstellen, aber dazu müßtest du sagen, wie du im Moment die Farben ausrechnest.

Danke Marco13,
Also das Image bekomm ich nun gezeichnet! Zumindest flackert das Bild kurzweilig auf!
Jedoch besteht weiterhin das Problem, dass wenn ich den InternalFrame bewege bzw das Fenster teilweise aushalb des Desktop ziehe oder minimiere, dass der Bildschirm weiß wird!

Hier mal meine paint()
public void paintComponent(BufferedImage pImage) {
super.paintComponents(g);
g.drawImage(pImage,0,0,this);
}

Und hier die Einfärbung des Pixels:
img.setRGB(pX,pY,pFarbe.getRGB());

Ich benötige nicht ganz für jedes Pixel ein Color Objekt! Jedoch kann ein Pixel (bzw seine dazugehörige komplexe Zahl) nach bis zu 1000 mal aus der überprüfe() rausgeworfen werden. Die Zahl bei der sie rausfliegt entspricht der Farbe. Das heißt, dass ich ein Color Array mit 1000 Objekten habe, wobei ich jedes einzeln berechne. Dies muss in meinem Falle ein R,G und B Wert haben, da ich die Übergänge zwischen meiner Farbpalette (9 Farben kann man auswählen) zu diesem 1000er Array berechnen muss.

Kann das Programm gern auch schicken…

Danke für die Antworten =)

Der Post wurde leider als “erledigt” markiert, obwohl dies nicht der Fall ist…
noch hab ich das Problem, dass die repaint Methode nicht funktioniert…
Schade

Ein Beispielprogramm, was man einfach mit Copy&Paste rauskopieren und compilieren und starten kann, würde da sicher helfen…

Siehe Anhang - Passwort per PN

Hallo Marco13
Ich danke dir vielmals !!!
Respekt :slight_smile:

Gruß
Sponge