Bild skalieren

Status
Nicht offen für weitere Antworten.

Baweg

Mitglied
Hi, ich will ein Bild skalieren dass heißt von einer größeren Auflösung auf 896 x 717 bringen.

Zunächst habe ich es mit image.getScaledInstance(896, 717, Image.SCALE_SMOOTH); gemacht, klappt auch wunderbar nur gibt die Methode ein image zurück aber ich brauche ein BufferedImage. Die Umwandlung von Image in bufferedImage über drawImage() dauert dann immer 2 Sekunden was mir zu lang ist.....

Dann habe ich es mit AffineTransform at = AffineTransform.getScaleInstance(0.7f,0.7f); gemacht. Da kann ich das dann auch gleich an ein bufferedImage geben und ist auch sehr schnell, aber das skalieren ist nicht so "sauber" wie bei der Methode oben. Man kann Texte dann garnicht mehr entziffern...

Also ich bräuchte was, wie ich das "sauber" skaliert bekomme, das mir ein BufferedImage zurückgibt und was nicht 2 Sekunden dauert...
 
Code:
Image scaled = input.getScaledInstance(w, h, algo);
BufferdImage output = new BufferedImage(w, h, type);
Graphics2D g2d = output.createGraphics();
g2d.drawImage(scaled, 0, 0, null);
g2d.dispose();

Das dauert bei Dir 2 sec? Was hast Du bitte für nen Rechner?
 
Ja also hab mal alle Befehle einzelnd messen lassen und kam dann drauf, dass das drawImage meistens an die 2 Sekunden braucht... hab nen AMD 1400 und sonst läuft ja alles normal schnell... Komprimierung in Jpeg zB dauert auch nur paar ms....

Code:
BufferedImage bdest = new BufferedImage(896, 717, BufferedImage.TYPE_INT_RGB);
Graphics g = bdest.createGraphics(); 
BufferedImage image = robot.createScreenCapture(screen);
Image img =  image.getScaledInstance(896, 717, Image.SCALE_SMOOTH);
timeStart = System.currentTimeMillis();
g.drawImage(img,0,0,null);
timeEnd = System.currentTimeMillis();
System.out.println("Image => BufefredImage: " + (timeEnd - timeStart));

Konsolenausgabe:
Code:
Image => BufefredImage: 2263
 
Hab das länger nich mehr gemacht, aber bei mir gings immer schnell, damals auf nem AMD 1700+. Also irgendwas machst Du falsch. 😉
 
Lass doch das Ganze in einem eigenen Thread laufen; das hat sich bei Grafik und insbesondere beim Skalieren bewährt.
Code:
           new Thread(){
             public void run(){
              //Skalieren
             }
           }.start();
[code]
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben