 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Leader4
Anmeldungsdatum: 20.01.2005 Beiträge: 99 Wohnort: Leipzig
|
Verfasst am: 08.09.2007, 10:01 Titel: Problem bei einem Jpeg-Loader |
|
|
Hallo,
ich habe folgende Funktion zum Laden von Jpeg-Bildern in meinem Programm (die Funktion ist nicht von mir, aber ich hab die Funktion direkt hier im Forum gefunden):
Code: | BildladerQF:
'
'
'
Dim Image2 As Any Ptr
'
'
ScreenRes 800, 600, 32
'
'
Image2 = GetJpeg2(Bilderpfad$) 'Pfad des zu ladenden Bildes
If Image2 Then
Put (0, 0), Image2
Else
Print "File not found"
End If
'
'
'
Function GetJpeg2(Byval File As String) As Any Ptr
Dim Dib As FIBITMAP Ptr
Dim Dib32 As FIBITMAP Ptr
Dim SprWidth As Integer
Dim SprHeight As Integer
Dim Sprite As Any Ptr
Dim Bits As Any Ptr
Dib = FreeImage_Load(FIF_JPEG, File, JPEG_DEFAULT)
If Dib = 0 Then Return 0
'
FreeImage_FlipVertical Dib
Dib32 = FreeImage_ConvertTo32Bits(Dib)
'
Dib32 = FreeImage_Rescale (Dib32, 800, 600, 0)
'
SprWidth = FreeImage_GetWidth(Dib32)
SprHeight = FreeImage_GetHeight(Dib32)
Sprite = ImageCreate(SprWidth, SprHeight)
Bits = FreeImage_GetBits(Dib32)
'
MemCpy CPtr(Zstring Ptr, Sprite) + 4, Bits, SprWidth * SprHeight * 4
'
FreeImage_Unload(Dib32)
FreeImage_Unload(Dib)
'
Return Sprite
End Function
'
'
'
'
'
Return
|
Die Funktion lädt problemlos die gewünschten Bilder (etwa 1 Sekunde pro Bild). Ich besitze aber eine Bilderdatenbank, wo ich oft sehr viele Fotos anschauen möchte (Bildbetrachter, Diashow etc.). Das Problem ist, dass etwa nach dem 20. Bild die Ladezeit immer länger wird bzw. das Programm/das System kurz vorm Aufhängen ist. Die Ladezeit übersteigt dann schnell 5 Sekunden oder das Programm fährt für eine halbe Minute fest.
Hat jemand eine Ahnung, woran das liegen kann? Ich hab die Funktion nicht wirklich verstanden, das heißt, ich weiß nicht, was ich ändern soll/kann, um das Problem evtl. zu beheben. Vielleicht kann mir jemand einen Tipp geben, was man am Code ändern kann.
Noch ein kleiner Hinweis, wie ich die Funktion bspw. verwende (vielleicht liegt dort schon der Fehler):
Code: | Diashow:
Randomize Timer
Zufall = Int(Anzahl.Bilder * Rnd) + 1
Pfad$ = GetPfad ( Registry$(Zufall,1) )
T1# = Timer
Do
T$ = Inkey$
If T$=CHR(255,107) Then Gosub ENDE:
If T$=Chr$(27) Then ' Beenden Anzeigen von Zufallsbildern
Screen 19
Goto 100
End If
If T$ = Chr$(13) Then Gosub Diashow ' Zeigt neues Zufallsbild an (rekursiv)
'
If Timer-T1# > Popt.Dia Then Gosub Diashow ' Halte Bild für Popt.Dia Sekunden fest
'
Loop
'
|
Vielen Dank für eure Hilfe  _________________ Ein richtiger Programmierer muss so richtig faul sein und sich den ganzen Tag mit der Frage beschäftigen, wie man mal wieder etwas einfacher machen kann. |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 08.09.2007, 10:06 Titel: |
|
|
Ich nehme an, das Du schlicht vergisst, den Speicher wieder frei zu geben... bei jeden geladenen Bild 'reservierst' Du Speicher, bringst es auf den Bildschirm [an dieser stelle muss der Speicher wieder freigegeben werden] und laedst das naechste Bild, wo wieder Speicher reserviert wird (der alte ist aber auch noch reserviert)
also um es kurz zu machen
nachdem Du das bild mit Put auf den Bildschirm gebracht hast,
machst Du einfach ein
Code: | ImageDestroy(Image2) |
Und laedst erst dann das naechste Bild, damit sollte Dein Problem behoben sein  _________________
 |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 08.09.2007, 10:11 Titel: |
|
|
Tja, wollte ich auch gerade sagen, war mal wieder zu langsam  _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Leader4
Anmeldungsdatum: 20.01.2005 Beiträge: 99 Wohnort: Leipzig
|
Verfasst am: 08.09.2007, 10:58 Titel: |
|
|
Vielen Dank euch, jetzt geht schon um einiges besser.
mfg,
Leader4 _________________ Ein richtiger Programmierer muss so richtig faul sein und sich den ganzen Tag mit der Frage beschäftigen, wie man mal wieder etwas einfacher machen kann. |
|
Nach oben |
|
 |
csde_rats

Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|