Seite 1 von 1

PB 4.xx kommt nicht mit 1 Bit Bitmaps von MSPaint zurecht.

Verfasst: 09.05.2008 14:36
von SoS
Wer schon immer mal seinen Speicher auslasten wollte,sollte folgendes testen.

Mit MSPaint ein 1 Bit Bitmap erstellen und folgenden Code mal laufen lassen.
PB 3.94 hat damit kein Problem.

Code: Alles auswählen

Filename.s= OpenFileRequester("1Bit Bitmap","","All supported formats|*.bmp|BMP image (*.bmp)",0)

For x=0 To 10000
  If IsImage(Image_1) 
    FreeImage(Image_1)
  EndIf
  Image_1= LoadImage(#PB_Any,Filename) 
Next

MessageRequester("Imagebug", "Look in your Taskmanager")

Verfasst: 09.05.2008 20:21
von Falko
Dann probiere mal dieses hier aus

Code: Alles auswählen

Filename.s= OpenFileRequester("1Bit Bitmap","","All supported formats|*.bmp|BMP image (*.bmp)",0)



For x=0 To 10000
  If IsImage(Image_1)
    FreeImage(Image_1)
    Delay(10)
  Else
  EndIf
  Image_1= LoadImage(#PB_Any,Filename)
  Debug "ImageNr:"+Str(x)+ "  "+ Str(Image_1)
Next
MessageRequester("Imagebug", "Look in your Taskmanager") 
FreeImage() ist wohl nicht so schnelle, wie der Speicher voll wird :mrgreen:

Also mit dem Delay(10) läufts bei mir bis volle 10000 durch.
Ohne hört's bei ca. 9333 auf

Gruß Falko

Verfasst: 09.05.2008 23:01
von SoS
Falko hat geschrieben:Dann probiere mal dieses hier aus

Code: Alles auswählen

Filename.s= OpenFileRequester("1Bit Bitmap","","All supported formats|*.bmp|BMP image (*.bmp)",0)



For x=0 To 10000
  If IsImage(Image_1)
    FreeImage(Image_1)
    Delay(10)
  Else
  EndIf
  Image_1= LoadImage(#PB_Any,Filename)
  Debug "ImageNr:"+Str(x)+ "  "+ Str(Image_1)
Next
MessageRequester("Imagebug", "Look in your Taskmanager") 
FreeImage() ist wohl nicht so schnelle, wie der Speicher voll wird :mrgreen:

Also mit dem Delay(10) läufts bei mir bis volle 10000 durch.
Ohne hört's bei ca. 9333 auf

Gruß Falko
Du könntest ein Delay von einer Stunde einfügen,das ändert nichts an der Tatsache das der Speicher nicht freigegeben wird.

Getestet hab ich es mit einer 1680x1050x1bit,nach 1000 durchläufen mit DEINEM Delay hat das Programm 227880 MB verschlungen.

Ohne Delay verbauch es genau soviel.

Verfasst: 11.05.2008 19:46
von Falko
Hier noch was für Fred als Beispiel, wenn du posten möchtest. So wie es
aussieht, wird der Speicher bei FreeImage nicht frei gegeben, solange das
Programm noch läuft und die Messagebox das nicht beendet.
Sind es mehr Bilder oder auch grössere Bilder, wird irgendwann der Gesamtspeicher überlaufen .
Es scheint also ein Bug mit FreeImage zu Monochrombildern zu sein, welcher sich auch in der aktuellen Beta 5 noch befindet. Hattest du Fred das schon gepostet?

In der Hilfe steht, folgendes:
Syntax

FreeImage(#Image)
Beschreibung

Gibt das angegebene Bild '#Image' und dessen zugehörigen Speicher frei.

Hinweis: alle verbleibenden Bilder werden automatisch freigegeben, wenn das Programm endet.
wobei der Hinweis der Hilfe zum Ende des Programms zwar korrekt funktioniert, aber bei großen Anzahl der Bilder oder großen Bilder
irgendwann der Speicher überlaufen wird.

Du hast damit Recht gehabt. Wer will kann sich ja den Unterschied
zwischen Monochrombildern und Farbbildern im Taskmanager anschauen :wink:

Code: Alles auswählen

Filename.s= OpenFileRequester("1Bit Bitmap","","All supported formats|*.bmp|BMP image (*.bmp)",0)
RunProgram("Taskmgr","","",0); Look at PureBasic_Compilation0 in your Taskmanager
For x=0 To 10000
  If IsImage(Image_1)
    FreeImage(Image_1); all memory from this Images are not erased!
    Delay(10)
  Else
  EndIf
  Image_1= LoadImage(#PB_Any,Filename)
Next
MessageRequester("Imagebug", "Look in your Taskmanager at Memory from PureBasic_Compilation0.exe")

Grüße ... Falko

Verfasst: 12.05.2008 22:15
von Falko
So, nun ist's erledigt :mrgreen:

Ich hatte es in's englische Forum gepostet und Fred hat's nun gefixt.
Finde ich toll, wie schnell Fred reagiert hat. Top Team.

http://www.purebasic.fr/english/viewtopic.php?t=32299

Gruß Falko

Verfasst: 20.05.2008 17:41
von SoS
jo Danke.

Benutze solange GDI+ zum laden und geht problemlos. ;)