Hallo Leute,
ich versuche eine kleine Anwendung zu schreiben, die unter anderem Bilder verwalten soll. Hierzu habe ich eine Art Image-Flow-Komponente erstellt, also eine Liste mit Vorschaubildern, die beim Scrollen "durchrutschen". Diese funtkioniert auch recht prächtig und die "Flow"-Animtion sieht wirklich nett aus, aber ich habe ein Problem mit dem Laden der Vorschaubilder.
Diese müssen eine größe von mindesten 300x300 Pixel habe, sonst sieht's bei größerer Darstellung sch**** aus!
Wenn ich nun alle Bilder in den Speicher laden wollte, dürfte jeder Ordner nur maximal etwas über 200 Bilder beinhalten, da dann der Speicher voll ist und ich eine StackOverflowException bekomme.
Da bei der Animation immer nur höchstens 4 Bilder gleichzeitig sichtbar sind, habe ich auch schon versucht, wirklich nur diese 4 Bilder in einen Puffer zu laden und dann beim Scrollen ein neu "einfließendes" Bild aus einer RandomAccess-Datei auszulesen und im Puffer abzulegen, bis es wieder aus dem Bild ist.
Dies dauert jedoch zu Lange!
Ich schreibe und Lese die Vorschaubilder mithilfe der entsprechenden ImageIO-Methoden, wobei ich die Daten aus der Datei erst in einen ByteArray-Stream lade. Speichere ich die Vorschaubilder unkomprimiert (als bmp), sind sie sehr groß und das Auslesen dauert extrem lange. Speichere ich sie komprimiert (als jpg/png) geht das lesen fix, aber das Konvertieren in ein Image braucht dafür sehr lange. In jedem Fall dauert das Laden des neuen Bildes etwa 60-80 ms und dadurch kommt die Animation ins stocken.
Ich habe auch schon versucht, den Puffer auf 6 Bilder zu erweitern und dann das Auslesen der neuen Bilder in einem parallelen Thread abzuhandeln, damit die Animtion schon ein Bild "weiterfließen" kann, wärend das neue Bild parallel dazu gelesen wird. Auch hier stockt aber die Animation, selbst wenn ich dem Lese-Thread die niedrigst-mögliche Priorität zuweise.
Ich bin nun langsam mit meinen Ideen am Ende und wäre für jeden Vorschlag Dankbar!
Gruß,
SuperSeppel13
ich versuche eine kleine Anwendung zu schreiben, die unter anderem Bilder verwalten soll. Hierzu habe ich eine Art Image-Flow-Komponente erstellt, also eine Liste mit Vorschaubildern, die beim Scrollen "durchrutschen". Diese funtkioniert auch recht prächtig und die "Flow"-Animtion sieht wirklich nett aus, aber ich habe ein Problem mit dem Laden der Vorschaubilder.
Diese müssen eine größe von mindesten 300x300 Pixel habe, sonst sieht's bei größerer Darstellung sch**** aus!
Wenn ich nun alle Bilder in den Speicher laden wollte, dürfte jeder Ordner nur maximal etwas über 200 Bilder beinhalten, da dann der Speicher voll ist und ich eine StackOverflowException bekomme.
Da bei der Animation immer nur höchstens 4 Bilder gleichzeitig sichtbar sind, habe ich auch schon versucht, wirklich nur diese 4 Bilder in einen Puffer zu laden und dann beim Scrollen ein neu "einfließendes" Bild aus einer RandomAccess-Datei auszulesen und im Puffer abzulegen, bis es wieder aus dem Bild ist.
Dies dauert jedoch zu Lange!
Ich schreibe und Lese die Vorschaubilder mithilfe der entsprechenden ImageIO-Methoden, wobei ich die Daten aus der Datei erst in einen ByteArray-Stream lade. Speichere ich die Vorschaubilder unkomprimiert (als bmp), sind sie sehr groß und das Auslesen dauert extrem lange. Speichere ich sie komprimiert (als jpg/png) geht das lesen fix, aber das Konvertieren in ein Image braucht dafür sehr lange. In jedem Fall dauert das Laden des neuen Bildes etwa 60-80 ms und dadurch kommt die Animation ins stocken.
Ich habe auch schon versucht, den Puffer auf 6 Bilder zu erweitern und dann das Auslesen der neuen Bilder in einem parallelen Thread abzuhandeln, damit die Animtion schon ein Bild "weiterfließen" kann, wärend das neue Bild parallel dazu gelesen wird. Auch hier stockt aber die Animation, selbst wenn ich dem Lese-Thread die niedrigst-mögliche Priorität zuweise.
Ich bin nun langsam mit meinen Ideen am Ende und wäre für jeden Vorschlag Dankbar!
Gruß,
SuperSeppel13