Image laden sehr langsam

Spaceman85

Mitglied
Mein Problem ist , dass folgender Code zum laden und Anzeigen der Bilder sehr lange bei der Ausführung dauert.
ca 300 Bilder in der DB bei einer größe von 20-100kb pro Bild.
Das laden dauert knapp 10 sek.
Kann man das irgendwie beschelunigen?

Gruß
Spaceman


Code:
File file = new File("img_fm/"+model.getFilmData().elementAt(i).getName()+".jpg");
			ImageIcon icon;
			if(file.exists())
			{
				 icon = new ImageIcon("img_fm/"+model.getFilmData().elementAt(i).getName()+".jpg");
			}
			else
			{
				icon = new ImageIcon("sources/no_pic.gif");
			}
			
			icon.setImage(icon.getImage().getScaledInstance(100, 150, 0));
			btns.elementAt(i).setIcon(icon);
 
Hi,
ich habe es mal mit der ImageIO-Klasse versucht. Dabei habe ich für ein Bild zum laden 1,484sec gebraucht. Ich hoffe das reicht. ;)
Java:
public class FastImageLoader
{
	public static Image loadImage(String filename) throws IOException {
		final File input = new File(filename);
		if(!input.exists()) {
			throw new FileNotFoundException("The Imagefile '"+filename+"' does not exists");
		}
		return ImageIO.read(input);
	}
}

Gruß

Fabio
 
Ok, neuer Versuch.^^
300 Bilder in 3.515sec ;)

Java:
public class FastImageLoader
{
	/**
	 * @param filename
	 * @return the loaded Image
	 * @throws IOException
	 */
	public static Image loadImage(String filename) throws IOException {
		return loadImage(new File(filename));
	}
	
	/**
	 * @param file
	 * @return the loaded Image
	 * @throws IOException
	 */
	public static Image loadImage(File file) throws IOException {
		if(!file.exists()) {
			throw new FileNotFoundException("The Imagefile '"+file.getPath()+"' does not exists");
		}
		return ImageIO.read(file);
	}
	
	public static void main(String[] args) {
		File dir = new File("./images/transformer_title_01-06-2011");
		File[] listFiles = dir.listFiles();
		
		
		StopWatch sw = new StopWatch();
		sw.start();
		for(int i = 0; i < listFiles.length; i++) {
			if(i % 10 == 0) {
				System.out.println(i + " Images loaded...");
			}
			try {
				loadImage(listFiles[i]);
			} catch(IOException e) {
				e.printStackTrace();
			}
		}
		sw.stop();
		System.out.println("Images loaded in Time = " + (sw.getTime() / 1000.0));
	}
}

Ausgabe
Java:
0 Images loaded...
10 Images loaded...
20 Images loaded...
30 Images loaded...
40 Images loaded...
50 Images loaded...
60 Images loaded...
70 Images loaded...
80 Images loaded...
90 Images loaded...
100 Images loaded...
110 Images loaded...
120 Images loaded...
130 Images loaded...
140 Images loaded...
150 Images loaded...
160 Images loaded...
170 Images loaded...
180 Images loaded...
190 Images loaded...
200 Images loaded...
210 Images loaded...
220 Images loaded...
230 Images loaded...
240 Images loaded...
250 Images loaded...
260 Images loaded...
270 Images loaded...
280 Images loaded...
290 Images loaded...
300 Images loaded...
Images loaded in Time = 3.515

ps.: Die Bilder sind im Durchschnitt ca. 40kb groß

Gruß

Fabio
 
Ja schon, aber es funktioniert. Warum es bei dem 1 Bild so lange gedauert hat weiß ich nicht. Aber du kannst den Code doch mal ausprobieren und die Zeit stoppen, wie lange es dauert bis deine Images alle geladen sind.
 
Habe schon und es ist leider kein Unterschied fest zu stellen!
Vieleicht ist mein Rechner langsamer als deiner!?
Wie gross ist dein Bild?
 
Zuletzt bearbeitet:
Ok, ich habe dir hier mal meine Testdaten aufgelistet:

Test1 (ImageIO):
Zeit: 2.844s
Größe: 23955b (Durchschnittswert)

Zeit = 27.469s
Größe = 104396b (Durchschnittswert)

Java:
	public static Image loadImage(File file) throws IOException {
		if(!file.exists()) {
			throw new FileNotFoundException("The Imagefile '"+file.getPath()+"' does not exists");
		}
		return ImageIO.read(file);
	}

Test2 (Toolkit):
Zeit: 0.563
Größe: 23955b (Durchschnittswert)

Java:
	public static Image loadFastImage(File file) throws IOException {
		if(!file.exists()) {
			throw new FileNotFoundException("The Imagefile '"+file.getPath()+"' does not exists");
		}
		return Toolkit.getDefaultToolkit().createImage(file.getPath());
	}
Wenn du willst, kann ich das gerne auch noch mit größeren Bildern testen.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück