ZoomImage flackert -> Fehler: repaint-Aufruf [gelöst]

Status
Nicht offen für weitere Antworten.

Dragonfire

Bekanntes Mitglied
Hihu,

Folgender Entwurf schwebt mir vor:
Ich übergebe einer Klasse, die von JPanel erbt,
eine Hintergrundbild und das zu zommende Bild in höchster Auflösung,
sowie Startpunkte (zur Vereinfachung zurzeit konstant).

Hab mir schon einiges so Double-Buffering und Zeichnen mit Swing durchgelesen ..
irgendwas mache ich aber falsch ...

Aufgrund dieses Thread hier;

http://www.java-forum.org/awt-swing-swt/80077-bilder-skaliert-zeichnen.html

habe ich mich entschieden alle Bilder erst zu rendern,
anschließend zu zoomen ...

Wenn das Bild gezommt ist und ich die Größe des Fensters minimiere oder
ein anderes davor schiebe gibt es keine Probleme ...

Beim zoomen flackert allerdings mein Bild ..
Ich dachte Swing hätte einen automatischen Buffer?
(BufferStrategy)

Wie verhindere ich ein Flackern ?

Kann ich getGraphics() in myZoom irgendwie vermeiden?

[HIGHLIGHT="Java"]public class ZoomImage3 extends JPanel
{
//DATENFELDER

private int startX;
private int startY;
private BufferedImage bakImg;
private BufferedImage zoomImg;
private ImageProducer2 imageProducer;

private int tmpWidth;
private int tmpHeight;
private int speed = Image.SCALE_REPLICATE;
private int pixel = 4;
private Image currentImage;
//for Double-Buffering
private Image[] tmpImg;
private Graphics tmpG;

public ZoomImage3(ImageProducer2 imageProducer)
{
this.imageProducer = imageProducer;
}

public void setBakImg(BufferedImage bakImg)
{
this.bakImg = bakImg;
this.tmpImg = new Image[90];
}

public void setImg(BufferedImage zoomImg)
{
setPreferredSize(new Dimension(600,600));
this.zoomImg = zoomImg;
startX = 20;
startY = 20;
tmpWidth = 10;
tmpHeight = 10;
currentImage = zoomImg.getScaledInstance(tmpWidth, tmpHeight, speed);
}

public void zoomImage()
{
myZoom();
}

/**
* modifizierte "paint"-Methode,
* zeichnet das jeweiliges Hintergrundbild und aktuelle Bild.
*/

public void paintComponent(Graphics g)
{

super.paintComponent(g);
g.drawImage(this.bakImg, 0, 0, this);
g.drawImage(this.currentImage, startX, startY, this);
}

public void myZoom()
{
tmpG = this.getGraphics();
speed = Image.SCALE_FAST;
for(int i = 0; i < tmpImg.length ; i++)
{
tmpImg = zoomImg.getScaledInstance(tmpWidth, tmpHeight, speed);
tmpHeight += pixel;
tmpWidth += pixel;
}

for(int i = 0; i < tmpImg.length; i++)
{
currentImage = tmpImg;
paintComponent(tmpG);
}
speed = Image.SCALE_AREA_AVERAGING;
paintComponent(tmpG);
}


public void updateImage(Graphics g)
{
paintComponent(g);
}
}//class close[/HIGHLIGHT]

PS.: Wie lautet der tag für die Javaformatierung hier im Forum ?
Code:
 sieht nicht so schön aus ...
 
Zuletzt bearbeitet:

Wildcard

Top Contributor
Das tmpG löschst du erstmal komplett. Wenn du zeichnen möchtest, dann rufst du repaint() auf.
Was soll das updateImage und wer ruft es auf?
 

Marco13

Top Contributor
Das updateImage könnte mit dem ImageObserver zu tun haben - aber das muss man nicht selbst implementieren....
 

Dragonfire

Bekanntes Mitglied
ES GEHT !!!
Danke an alle ..
da wäre ich nie darauf gekommen ...
Kann mir jemand ein gutes Tutorial bezüglich Graphics und Co empfehlen?
(Also paintComponent(), repaint(), doLayout(), ...)
ich meine nicht den Umgang mit JButton und so,
dass kann ich hoffentlich xD

Hier mein Prototype:

[highlight=Java]
public class ZoomImage3 extends JPanel
{
//DATENFELDER

private int startX;
private int startY;
private BufferedImage bakImg;
private BufferedImage zoomImg;
private ImageProducer2 imageProducer;

private int tmpWidth;
private int tmpHeight;
private int quality = Image.SCALE_REPLICATE;
private int speed = 12;
private int pixel = 4;
private Image currentImage;
//for Double-Buffering
private Image[] tmpImg;

public ZoomImage3(ImageProducer2 imageProducer)
{
this.imageProducer = imageProducer;
}

public void setBakImg(BufferedImage bakImg)
{
this.bakImg = bakImg;
this.tmpImg = new Image[(400 / this.pixel)-10];
}

public void setImg(BufferedImage zoomImg)
{
setPreferredSize(new Dimension(600,600));
this.zoomImg = zoomImg;
startX = 20;
startY = 20;
tmpWidth = 10;
tmpHeight = 10;
currentImage = zoomImg.getScaledInstance(tmpWidth, tmpHeight, speed);
}

public void zoomImage()
{
myZoom();
}

/**
* modifizierte "paint"-Methode,
* zeichnet das jeweiliges Hintergrundbild und aktuelle Bild.
*/

public void paintComponent(Graphics g)
{

super.paintComponent(g);
g.drawImage(this.bakImg, 0, 0, this);
g.drawImage(this.currentImage, startX, startY, this);
}

public void myZoom()
{
//rendering of the resizes images
for(int i = 0; i < tmpImg.length; i++)
{
tmpImg = zoomImg.getScaledInstance(tmpWidth, tmpHeight, quality);
tmpHeight += pixel;
tmpWidth += pixel;
}

//repaint
for(int i = 0; i < tmpImg.length; i++)
{
currentImage = tmpImg;
repaint();
try
{
Thread.sleep(speed * speed / (i+1) );
}
catch(Exception e)
{
System.out.println("Thread interrupted: ZoomImage @" + e);
}
}
repaint();
}
}//class close
[/highlight]


Nachtrag:

updateImage kam wie von "Marco13" richtig vermutet aus ImageObserver
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D JavaFX Label flackert beim aktualisieren AWT, Swing, JavaFX & SWT 12
Damtonix BufferStrategy flackert (Swing) AWT, Swing, JavaFX & SWT 9
M Warum flackert das Bild ? (Swing) AWT, Swing, JavaFX & SWT 16
frankred Swing Eigener ListCellRenderer D'n'D "MOVE" - Mauszeiger flackert AWT, Swing, JavaFX & SWT 14
T Swing OpenOffice IFrame flackert beim ändern der Größe AWT, Swing, JavaFX & SWT 6
K Swing Spiel flackert sehr häufig AWT, Swing, JavaFX & SWT 2
J Applet Tetris flackert AWT, Swing, JavaFX & SWT 9
D 2D-Grafik Animation flackert AWT, Swing, JavaFX & SWT 8
J Swing JWindow flackert trotz Doppelpufferung AWT, Swing, JavaFX & SWT 2
B Swing JButton flackert trotz DoubleBufferings AWT, Swing, JavaFX & SWT 11
J Swing JEditorPane flackert AWT, Swing, JavaFX & SWT 2
H Swing JWindow flackert beim resizen AWT, Swing, JavaFX & SWT 6
P Image auf JPanel flackert AWT, Swing, JavaFX & SWT 3
M DragAndDrop-Waypoints bewegen, ABER Bildschirm flackert AWT, Swing, JavaFX & SWT 3
B JPanel#paintComponent(Graphics g) << flackert oO AWT, Swing, JavaFX & SWT 3
J JProgressBar flackert AWT, Swing, JavaFX & SWT 14
C JScrollPane flackert AWT, Swing, JavaFX & SWT 10
F JScrollPane ruckelt/flackert AWT, Swing, JavaFX & SWT 5
S [Swing] Tabelle flackert AWT, Swing, JavaFX & SWT 8
hannibalstgt Fehler bei JCOMBOBOX GUI Anzeige AWT, Swing, JavaFX & SWT 4
J Fehler bei jFame.setTitle() AWT, Swing, JavaFX & SWT 8
thor_norsk SpringBoot-Fehler AWT, Swing, JavaFX & SWT 7
J Ich kriege eine Fehler Messesage bei meinem Media Player AWT, Swing, JavaFX & SWT 8
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
S Fehler beim Öffnen weiterer FXML AWT, Swing, JavaFX & SWT 11
S JavaFX Fehler zwischen View und Controller bei MouseEvent (MVC) AWT, Swing, JavaFX & SWT 13
T ListView nach Erweiterung Fehler in CellFactory AWT, Swing, JavaFX & SWT 8
beli3ver JavaFX Anwendung startet nicht, kann den Fehler nicht finden (Exception in Application start method) AWT, Swing, JavaFX & SWT 1
J "Exception in thread "AWT-EventQueue-0"" Fehler AWT, Swing, JavaFX & SWT 3
parrot JavaFX Fehler AWT, Swing, JavaFX & SWT 4
H JavaFX JavaFX Import Fehler AWT, Swing, JavaFX & SWT 4
T Anderen Java Code durch Code kompilieren und Fehler in Label ausgeben AWT, Swing, JavaFX & SWT 5
M AWT Kann meinen Fehler beim ActionListener nicht finden AWT, Swing, JavaFX & SWT 5
Z Swing Wert aus Textfeld auslesen -- null Fehler AWT, Swing, JavaFX & SWT 4
A eine Fehler AWT, Swing, JavaFX & SWT 9
A Fehler beim Hintergrund AWT, Swing, JavaFX & SWT 17
L JavaFX Fehler beim setzen von Farben AWT, Swing, JavaFX & SWT 16
B JavaFX Text wird nicht angezeigt, kein Fehler AWT, Swing, JavaFX & SWT 2
W fillRect() in Schleife spukt nur Fehler aus AWT, Swing, JavaFX & SWT 3
S Fehler: Hauptklasse neon.Main konnte nicht gefunden oder geladen werden AWT, Swing, JavaFX & SWT 5
Tronert JavaFX Fehler beim Ändern der font-weight AWT, Swing, JavaFX & SWT 7
Tommy135 JavaFX JavaFX Fehler beim Scenewechsel AWT, Swing, JavaFX & SWT 23
V JavaFX Button Controller Fehler, trotz Erfolg in einem anderem Code? AWT, Swing, JavaFX & SWT 7
E Fehler bei Button AWT, Swing, JavaFX & SWT 1
L Unbekannter Fehler AWT, Swing, JavaFX & SWT 13
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
I Fehler bei Alert AWT, Swing, JavaFX & SWT 6
J Fehler bei PixelColor erkennung AWT, Swing, JavaFX & SWT 4
T Fehler bei ActionEvent? AWT, Swing, JavaFX & SWT 3
V Fehler bei Würfelsimulator GUI AWT, Swing, JavaFX & SWT 2
Z GUI-Problem, finde meinen Fehler nicht! AWT, Swing, JavaFX & SWT 11
Seikuassi SWING - (Hoffentlicher) simpler Color-Fehler AWT, Swing, JavaFX & SWT 4
M Swing finde den fehler nicht AWT, Swing, JavaFX & SWT 9
A Fehler bei erstellen eines JTextFields AWT, Swing, JavaFX & SWT 2
D Unlogischer Fehler? AWT, Swing, JavaFX & SWT 2
L Eclipse Fehler besser zu verstehen!!! AWT, Swing, JavaFX & SWT 4
E Warum macht die einfache Animation einen kleinen Fehler? AWT, Swing, JavaFX & SWT 14
bluerob Fehler bei Wertübermittlung über KeyListener AWT, Swing, JavaFX & SWT 3
H GUI-Textausgabe Fehler AWT, Swing, JavaFX & SWT 5
S String is null Fehler AWT, Swing, JavaFX & SWT 2
P Swing GroupLayout() Fehler? AWT, Swing, JavaFX & SWT 3
J JMenuBar ist geaddet, aber nicht im Frame. Wo ist der Fehler? (inkl. Code) AWT, Swing, JavaFX & SWT 2
N Touchscreen-Scrollen, wo liegt der Fehler? AWT, Swing, JavaFX & SWT 3
N Fehler Inhalt von JTable wird gelöscht AWT, Swing, JavaFX & SWT 5
S Fehler beim Zweites 3D Bild AWT, Swing, JavaFX & SWT 2
L Fehler beim erstellen einer Tabelle mithilfe von 2d-Array AWT, Swing, JavaFX & SWT 3
M GEF tutorial Fehler finden AWT, Swing, JavaFX & SWT 4
S Grafik Fehler AWT, Swing, JavaFX & SWT 15
M Fehler bei Arrayübergabe an JComboBox AWT, Swing, JavaFX & SWT 10
J Fehler beim Einklappen eines Trees AWT, Swing, JavaFX & SWT 4
P 2D-Grafik Fehler beim Laden eines Bildes AWT, Swing, JavaFX & SWT 25
S LayoutManager Fehler gesucht 18.6.2011 AWT, Swing, JavaFX & SWT 4
C Fehler nur bei manchen Usern AWT, Swing, JavaFX & SWT 8
Screen Fehler bei Get-Methode für ArrayList AWT, Swing, JavaFX & SWT 8
K JFrame + KeyListener + Runnable = Fehler AWT, Swing, JavaFX & SWT 3
I Fehler bei JFileChooser AWT, Swing, JavaFX & SWT 2
K 2D-Grafik Fehler beim Farbe auslesen AWT, Swing, JavaFX & SWT 3
J Fehler beim Gif Datei öffnen AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Fehler beim Überzeichnen von Linien AWT, Swing, JavaFX & SWT 11
E Swing Fehler nach Befüllen einer JTable mit gesetzem Rowsort?! AWT, Swing, JavaFX & SWT 10
P Swing Misteriöser Fehler JTable AWT, Swing, JavaFX & SWT 5
Y Swing JPasswordField Fehler AWT, Swing, JavaFX & SWT 14
A Swing Unknown Source Fehler AWT, Swing, JavaFX & SWT 9
N Fehler bei Grouplayout AWT, Swing, JavaFX & SWT 17
S ActionPerformed Fehler... AWT, Swing, JavaFX & SWT 9
C BufferedImage-Fehler? Falsches Bild wir gezeichnet AWT, Swing, JavaFX & SWT 5
A Tabellen Überschriften ändern -setColumnIdentifiers()- Fehler AWT, Swing, JavaFX & SWT 7
hdi Swing JTable: Fehler beim Nutzen von RowSorter#setRowFilter AWT, Swing, JavaFX & SWT 4
M.F.G. Fehler bei der Anzeige Grafischer Elemente AWT, Swing, JavaFX & SWT 13
D Swing Verwirrender Fehler AWT, Swing, JavaFX & SWT 7
J Fehler in fillRoundRect AWT, Swing, JavaFX & SWT 2
D Probleme mit Spiel-Engine. Komische Fehler. AWT, Swing, JavaFX & SWT 5
W fehler jedoch ka wo AWT, Swing, JavaFX & SWT 14
F Fehler in der Startklasse AWT, Swing, JavaFX & SWT 13
A Fehler bei der Parametereingabe? AWT, Swing, JavaFX & SWT 16
P finde den Fehler im JTable nicht AWT, Swing, JavaFX & SWT 2
Spin Fehler in Vergleich AWT, Swing, JavaFX & SWT 6
K Swing: ContentPane von JDialog ist transparent (Fehler) AWT, Swing, JavaFX & SWT 10
T Invalid Range - Fehler bei TableRowSorter / Tabelle AWT, Swing, JavaFX & SWT 17
DasDogma Fehler bei getText() AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen

Neue Themen


Oben