Halbe Sekunde für bild.getScaledInstance() ?

Opi3

Aktives Mitglied
EDIT: Hat sich erledigt, habe Eclipse neu gestartet (war essen) und jetzt heißt es plötzlich <5.0 Millisekunden. (Warum auch immer)



Hallo,
nachdem ich jetzt Tutorials gewälzt habe, bis sie mir zu den Ohren herauskamen 🙂rtfm🙂 wollte ich jetzt auch mal etwas machen. (Programmieren lernt man beim Programmieren).

Jetzt habe ich mir einen (funktionierenden) Code geschrieben um ein Image um einen Prozentsatz zu Skalieren.
Java:
private Image scaleImage(Image bild, double prozStauch) {
		double d = System.currentTimeMillis();
		int gw = (int)((double)(bild.getWidth(null))/100*prozStauch);
		int gh = (int)((double)(bild.getHeight(null))/100*prozStauch);
		Image scaBild = bild.getScaledInstance(gw, gh, Image.SCALE_SMOOTH);
		//////////////////
		System.out.println("gw = "+gw+"|gh = "+gh);
		System.out.println("BW = "+scaBild.getWidth(null)+"|BH = "+scaBild.getHeight(null));
		System.out.println(System.currentTimeMillis()-d);
		System.out.println();
		//////////////////
		return scaBild;
	}

aber a) die Ausgabe der Größe ist jeweils:
150|gh = 50
BW = -1|BH = -1
Könnte mir da jemand sagen warum -1,
das Bild wird nachher richtig angezeigt?

und b) die Funktion braucht 497.0 Millisekunden ? :shock:
Könnte mir auch hier einer sagen warum?

Opi3
 
Zuletzt bearbeitet:
Moin i love this kind of questions 😛

Also du benutzt die Klasse Image und dazu die Methode: getScaledInstance.
Ersteinmal verbraucht dein Programm Zeit beim skalieren ansich und zum anderen weil du den "hint"
SCALE_SMOOTH ausgewählt hast. Damit bevorzugst du Qualität aber nicht Geschwindigkeit.

Das schnellste ist : SCALE_REPLICATE bzw. SCALE_FAST

Um schneller zu skalieren kannst du seid JDK 1.2 Graphics.drawImage verwenden und das ist schneller, dazu RenderingHints.


Java:
public void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D)g;
        int newW = (int)(originalImage.getWidth() * xScaleFactor);
        int newH = (int)(originalImage.getHeight() * yScaleFactor);
        g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                            RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        g2.drawImage(originalImage, 0, 0, newW, newH, null);
    }

Performance:

1. Abhängig vom Pixel Format , TYPE INT RGB oder TYPE INT ARGB?

Also wandel dein Bild erst um bevor du skalierst.

External Site | Java.net

see image questions !!

greetz spin
 
Das marg ja alles angehen, aber eine halbe Sekunde beträgt der unterschied sicher nicht 😉
Das Problem hat sich aber auch gelöst, nach einem Neustart von Eclipse, war die Geschwindigkeit 'normal'.


Opi3
 

Neue Themen


Zurück
Oben