Frage zu Slide-Show-Grundgerüst
Übersicht

![]() |
4pacBetreff: Frage zu Slide-Show-Grundgerüst |
![]() Antworten mit Zitat ![]() |
---|---|---|
Guten Abend BB-Coder!
Ausgangssituation: Ich habe die letzten Tage als Anschauungsstück für meinen Freund ILLYA DER ECHSENDRÜCKER, der sich für BB interessiert, insbesondere dafür, was man "mal auf die Schnelle" mit Bilddateien machen kann in BB, ein Proggy gecodet, das alle jpg-Bilder aus einem Ordner (CurrentDir, das wo auch das Prog selbst liegt) ausliest und diese zufallsmäßig in der Art einer Slideshow anzeigt. Sehr basic, keine Resize-Funktion, kein Fading, keine GUI, nur die nackte Grundfunktionalität, um meinem Kollegen die Vorgehensweise zu zeigen, schlanke 38 Zeilen. Problem: Die Bilder werden sehr unterschiedlich lange angezeigt. Habe vermutlich irgendwo ein Speicherleck gecodet. Was meint Ihr? Hier mal der Code... freue mich über konstruktive Anregungen. Ihr braucht das Proggy nur in einem Ordner ablegen, in dem ein paar jpg-Bilder legen, und starten. Funzt im Moment aufgrund der Const max_bilder% = 100 nur bis 100 Bilder im Ordner, danach würdet Ihr einen Array Index Out Of Bounds bekommen. Die Zahl könnt ihr zwar beliebig höher setzen im Rahmen dessen was Euer Rechner hergibt, ist zum Testen aber weder nötig noch sinnvoll. Habe meinem Freund auch den Link zu diesem Thread gemailt... ILLYA DER ECHSENDRÜCKER liest also mit... danke vorab von uns beiden & viele Grüße, 4pac Code: [AUSKLAPPEN] Graphics 800,600,16,2
Const max_bilder% = 100 Dim bild_pfad$(max_bilder) Global bildmenge%, bildcounter% ; Directory öffnen zum Auslesen folder$=CurrentDir$() myDir=ReadDir(folder$) Repeat ;' ### ANFANG Schleife zum Auslesen des Verzeichnisses ............................................................................... file$=NextFile$(myDir) If file$="" Then ; Abbruchbedingung der Repeat-Forever-Schleife: Keine weitere Datei im Verzeichnis bildmenge = bildcounter Exit End If If Right$(file$,3) = "jpg" Then bild_pfad$(bildcounter) = (folder$+file$) bildcounter = bildcounter + 1 End If Forever ;' ### ENDE Schleife zum Auslesen des Verzeichnisses ................................................................................... CloseDir myDir ;Directory korrekt schließen While Not KeyHit(1) ;SLIDESHOW-Teil ........................ SeedRnd (MilliSecs()) zufallswert = Rand(0,bildmenge-1) aktuellesbild = LoadImage (bild_pfad$(zufallswert)) Cls DrawImage aktuellesbild,0,0 : Text 10,10,AvailVidMem() Flip Delay 1000 FreeImage aktuellesbild Wend |
||
- Zuletzt bearbeitet von 4pac am Sa, Jul 28, 2007 2:57, insgesamt 8-mal bearbeitet
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielleicht hast du einfach größere und kleinere Bilder?
Das Laden der größeren dauert natürlich etwas länger(sollte allerdings in ertragbarem Rahmen liegen). Achja, die maximale Bilderzahl ist durch die Rechnerleistung übrigens nicht eingeschränkt. Immerhin hast du ja immer nur ein Bild zur Zeit im Speicher. |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
- Zuletzt bearbeitet von aMul am Sa, Jul 28, 2007 1:44, insgesamt 2-mal bearbeitet
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
ich denke das liegt an den Ladezeiten der Bilder. Ich habe mal etwas Code eingebaut, um die Zeit zu messen, die für das Laden des Bildes benötigt wird. Sie ist immer etwas höher als das Delay, wenn auch meistens unwesentlich. Ab und zu dauert das Laden dann auch mal 2 statt 1 Sekunde, wenn das Programm nicht hinterher kommt. Edit: Ich bin einfach zu langsam ... |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
- Zuletzt bearbeitet von ChristianK am Sa, Jul 28, 2007 1:54, insgesamt einmal bearbeitet
![]() |
4pac |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für euer schnelles Feedback, Freunde, und dass ihr so schnell in Aktion getreten seid... aber meint Ihr echt, die unterschiedlichen Dateigrößen könnten sich dermaßen in der Performance niederschlagen? Ich kann es mir kaum vorstellen, in meinen Games und Anwendungen habe ich schon wer weiß was an Grafikdatenmasse durch BB-Programme gezogen, vorne rein und hinten wieder raus, und hatte immer den Eindruck, das passiert alles (fast) in Echtzeit. Und hier passiert ja nichts mit den Bildern, sie werden nur geladen und angezeigt - und die 10 Bilder, mit denen ich teste, sind zwischen 100 und 1000 kb groß.
Ich finde Eure Ansätze zum Debuggen gut und bedanke mich einstweilen... würde aber sehr gerne noch mehrere Meinungen hören. Grüße, 4pac |
||
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ersetze das Delay mal durch WaitTimer. Danach liegt der Zeitunterschied auf meinem Rechner bei maximal 2 Millisekunden und jedes Bild erscheint gleich lange. Delay hält das komplette Programm an und anscheinend auch den Ladevorgang der Bilder. | ||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
4pac |
![]() Antworten mit Zitat ![]() |
---|---|---|
ProGamer.Coder, ich muss da jetzt ganz doof fragen, wo du die Timer-Befehle positioniert hast... ich hab es nämlich eben damit versucht, habe aber immer noch sehr unterschiedliche Anzeige-Zeiten. Ich arbeite in Games zwar auch routinemäßig mit Timern, aber in diesem Fall muss ich passen.
Grüße, 4pac |
||
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe WaitTimer( timer ) nach Flip eingesetzt, statt dem Delay.
Natürlich vor der Hauptschleife noch ein timer = CreateTimer( 1 ). ![]() |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
Moep |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du könntest auch die Bilder gleich laden,anstatt die Bildpfade zwischen zu speichern.
Dadurch wirst du denk ich gar keine Ladezeit mehr haben (also nur am anfang) und kannst beruhigt mit Delay arbeiten. mfg Moep |
||
Hardstyle Schleichwerbung:
http://www.youtube.com/user/Hackepeter42 Achtung: Suchtgefahr! moep123.ohost.de |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ProGamer.Coder hat Folgendes geschrieben: Ich habe WaitTimer( timer ) nach Flip eingesetzt, statt dem Delay.
Natürlich vor der Hauptschleife noch ein timer = CreateTimer( 1 ). ![]() Wenn dann muss das Waittimer() hinter das LoadImage()... Das ist ja schließlich der Befehl, der unterschiedlich lange dauert. @Moep: Das wäre bei vielen Bildern allerdings eine recht große Belastung für den Arbeitsspeicher, was man sich sparen kann, da es ja eh immer lange Pausen gibt in denen man laden kann. |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group