Hihu,
hab mal wieder ein Problem,
dass mich Verzweifeln lässt ...
Ich hab eine Art ZoomPanel programmiert ...
Hat ein Hintergrundbild und ein weiteres welches dann vergrößert wird ...
Hier mal ein kurzer Einblick in meiner Klasse ZoomImage3:
[highlight=Java]/**
* modifizierte "paint"-Methode,
* zeichnet das jeweiliges Hintergrundbild und aktuelle Bild.
*/
public void paintComponent(Graphics g)
{
super.paintComponent(g);
try
{
g.drawImage(this.bakImg, 0, 0, this);
}
catch(Exception e)
{}
try
{
g.drawImage(this.currentImage, startX, startY, this);
}
catch(Exception e)
{}
}
/**
* interne zoom-Methode.
*/
private void myZoom()
{
this.display = true;
//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++)
{
changeXY();
currentImage = tmpImg;
repaint(this.startX, this.startY,
currentImage.getWidth(null), currentImage.getHeight(null));
try
{
Thread.sleep(speed * speed / (i+1) );
}
catch(Exception e)
{
System.out.println("Thread interrupted: ZoomImage @" + e);
}
}
repaint();
} [/highlight]
Mit meiner Testmethode geht alles wunderbar:
[highlight=Java]public void testZoom2(int n, int modus)
{
//Bild zum Vergrößern
BufferedImage zoomImg = null;
//Frame
javax.swing.JFrame f = new javax.swing.JFrame("TEST");
//mein ZoomPanel
ZoomImage3 p = new ZoomImage3(this.imageProducer);
try
{
//holt sich Hintergrundbild
BufferedImage bakImg = javax.imageio.ImageIO.read(getClass().getResource("test\\test.jpg"));
p.setBakImg(bakImg);
}
catch(Exception e)
{}
//init Frame
f.add(p);
f.pack();
f.setVisible(true);
//benötigt für das Bild zum Vergrößern
PossibleAnswer pa = new PossibleAnswer(new JGraphX());
for(int i = 0; i < n; i++)
{
//holt sich das zu vergrößerne Bild
zoomImg = pa.getImage(this.imageProducer);
p.setImg(zoomImg,100,100,100,100);
//zoomt
p.zoomImage(modus);
}
}[/highlight]
Sobald ich das in meiner kompletten GUI einfüge,
passiert beim zoom Vorgang nichts !!
die Schleife in ZoomImage3 mit dem repaint() wird ausgeführt ...
(mit System.out.println & debugging getestet)
aber die GUI ignoriert das irgendwie ...
nur der letzte Durchgang wird gezeichnet ...
Hat jemand eine Idee?
Ich glaube mein Ansatz ist falsch ...
ein Panel darf ja normalerweise nicht sagen,
wann es gezeichnet wird ...
oder fällt ein Zoom-Vorgang unter Sonderfälle?
Meine GUI besteht nur aus mehrer JPanels mit JLabels, einer Menübar.
Ein JLabel ist eine Uhr (Runnable).
PS.:
Hatte mit der Klasse schonmal Probleme:
http://www.java-forum.org/awt-swing-swt/80224-zoomimage-flackert-fehler-repaint-aufruf-geloest.html
hab mal wieder ein Problem,
dass mich Verzweifeln lässt ...
Ich hab eine Art ZoomPanel programmiert ...
Hat ein Hintergrundbild und ein weiteres welches dann vergrößert wird ...
Hier mal ein kurzer Einblick in meiner Klasse ZoomImage3:
[highlight=Java]/**
* modifizierte "paint"-Methode,
* zeichnet das jeweiliges Hintergrundbild und aktuelle Bild.
*/
public void paintComponent(Graphics g)
{
super.paintComponent(g);
try
{
g.drawImage(this.bakImg, 0, 0, this);
}
catch(Exception e)
{}
try
{
g.drawImage(this.currentImage, startX, startY, this);
}
catch(Exception e)
{}
}
/**
* interne zoom-Methode.
*/
private void myZoom()
{
this.display = true;
//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++)
{
changeXY();
currentImage = tmpImg;
repaint(this.startX, this.startY,
currentImage.getWidth(null), currentImage.getHeight(null));
try
{
Thread.sleep(speed * speed / (i+1) );
}
catch(Exception e)
{
System.out.println("Thread interrupted: ZoomImage @" + e);
}
}
repaint();
} [/highlight]
Mit meiner Testmethode geht alles wunderbar:
[highlight=Java]public void testZoom2(int n, int modus)
{
//Bild zum Vergrößern
BufferedImage zoomImg = null;
//Frame
javax.swing.JFrame f = new javax.swing.JFrame("TEST");
//mein ZoomPanel
ZoomImage3 p = new ZoomImage3(this.imageProducer);
try
{
//holt sich Hintergrundbild
BufferedImage bakImg = javax.imageio.ImageIO.read(getClass().getResource("test\\test.jpg"));
p.setBakImg(bakImg);
}
catch(Exception e)
{}
//init Frame
f.add(p);
f.pack();
f.setVisible(true);
//benötigt für das Bild zum Vergrößern
PossibleAnswer pa = new PossibleAnswer(new JGraphX());
for(int i = 0; i < n; i++)
{
//holt sich das zu vergrößerne Bild
zoomImg = pa.getImage(this.imageProducer);
p.setImg(zoomImg,100,100,100,100);
//zoomt
p.zoomImage(modus);
}
}[/highlight]
Sobald ich das in meiner kompletten GUI einfüge,
passiert beim zoom Vorgang nichts !!
die Schleife in ZoomImage3 mit dem repaint() wird ausgeführt ...
(mit System.out.println & debugging getestet)
aber die GUI ignoriert das irgendwie ...
nur der letzte Durchgang wird gezeichnet ...
Hat jemand eine Idee?
Ich glaube mein Ansatz ist falsch ...
ein Panel darf ja normalerweise nicht sagen,
wann es gezeichnet wird ...
oder fällt ein Zoom-Vorgang unter Sonderfälle?
Meine GUI besteht nur aus mehrer JPanels mit JLabels, einer Menübar.
Ein JLabel ist eine Uhr (Runnable).
PS.:
Hatte mit der Klasse schonmal Probleme:
http://www.java-forum.org/awt-swing-swt/80224-zoomimage-flackert-fehler-repaint-aufruf-geloest.html