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

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

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

Beitrag 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")
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Beitrag 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
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Beitrag 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.
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Beitrag 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
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
Falko
Admin
Beiträge: 3531
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.0
Kontaktdaten:

Beitrag 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
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Beitrag von SoS »

jo Danke.

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