Graphics und Image - Performanceproblem

schnuffie

Erfahrenes Mitglied
Hallo Experten,

ich habe eine Matrix (100x100), in deren Elementen jeweils 1 der 3 verschiedene Bilder dargestellt werden. Ich verwende ein Gridlayout mit 100x100 Panels (die das Bild darstellen (in der paint-Methode gezeichnet)) und habe 3 statische Image-Varablen, die die Bilder verkörpern. Die Bilder werden also nur einmal geladen, jedoch 100x100 mal gezeichnet. Wir könnte ich das performanter lösen? Es dauert z.Z. ziemlich lange (fast 1min), ehe die Matrix im Frame angezeigt wird.
Gibt's nicht auch die Möglichkeit, auf ein Graphics zu zeichnen und dieses dann in die paint-Methode des Element-Panels zu kopieren? Wäre das performanter? Wie würde das in Code-Form z.B. aussehen?
 
Hallo Steffen,

hier ein Lösungsversuch eines Laien!

Die Anzeigedauer mit folgendem Code sind auf meinem PC nur wenige Sekunden. Allerdings kommt es ja auch auf die Bildgröße an. Ich habe drei verschiedene kleine Bilder (32,32) verwendet.

Kennst du die Klasse MediaTracker? Erkundige dich mal danach. Mit dem MediaTracker kannst du unter anderem managen wann welche Bilder geladen werden sollen.

Noch eines vielleicht, probiere mal verschiedene Bildformate aus. Als Webdesigner müsstest du doch wissen, welches Bildformat schneller geladen werden kann.


Code:
import java.awt.*;
import javax.swing.*;

public class Hundred extends JFrame {

	int number = 100;

	JPanel pan = new JPanel();
	JScrollPane scroll = new JScrollPane(pan);

	ImageIcon a = new ImageIcon("a1.jpg");
	ImageIcon b = new ImageIcon("b1.jpg");
	ImageIcon c = new ImageIcon("a2.jpg");

	public Hundred() {		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pan.setLayout(new GridLayout(number, number));
		setSize(500,500);
		
		for (int i = 0; i < number; i++)
			for (int j = 0; j < number; j++)
				switch (i % 3) {
				case 0: pan.add(new JLabel(a)); break;
				case 1: pan.add(new JLabel(b)); break;
				case 2: pan.add(new JLabel(c));
				}
		
		add(scroll);
		
		setVisible(true);
	}

	public static void main(String[] args) {
		new Hundred();
	}
}

Vg Erdal
 
Zurück