Image innerhalb einer Procedure löschen?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Image innerhalb einer Procedure löschen?

Beitrag von Velindos »

Hallo Leute,

wenn ich ein Image innerhalb einer Procedur verwende, muss das gelöscht werden?

Wenn ich wie Beispiel es lösche, wird es im Imagegadget nicht mehr angezeigt!

Code: Alles auswählen

Procedure Display_Grosses()
  Protected myGrossDisplay

  ImageMemSize = MemorySize(*ImageMemory)  
  myGrossDisplay = CatchImage(#PB_Any, *ImageMemory, ImageMemSize)

  ; -----------------------------
  ; FREEIMAGE -   ; Hier mein Problem es wird im Gadget nicht mehr Angezeigt
  ; If IsImage(myGrossDisplay): FreeImage(myGrossDisplay): EndIf
  ; -----------------------------
EndProcedure
Muss man das Image löschen ....? wenn es innerhalb einer Procedure verwendet wird?

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Image innerhalb einer Procedure löschen?

Beitrag von mk-soft »

Du hast das Image mit #PB_Any angelegt und es wird die PB Image ID nicht global gespeichert.
Somit wird beim erneuten Aufruf der Procedure wieder ein neues Image erstellt.

JA ... Du must das Image freigeben, sonst hat dein Programm ein speicherleck.

Besser so ... Am Ende des Programm kümmert sich PB darum das die letzen Images freigegeben werden.

Code: Alles auswählen

Procedure Display_Grosses()
  Static myGrossDisplay
  
  If myGrossDisplay
    If IsImage(myGrossDisplay)
      FreeImage(myGrossDisplay)
    EndIf
    myGrossDisplay = 0
  EndIf
  
  ImageMemSize = MemorySize(*ImageMemory)  
  myGrossDisplay = CatchImage(#PB_Any, *ImageMemory, ImageMemSize)

  ;TODO
  
EndProcedure
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Image innerhalb einer Procedure löschen?

Beitrag von Velindos »

Hallo, Danke für deinen Tip.

Welchen Vorteil hat es für das Programm wenn ich Global das Bild verarbeite oder Static mäßig?

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: Image innerhalb einer Procedure löschen?

Beitrag von mhs »

Es macht keinen großen Unterschied, ob die die ImageID in einer globalen Variable speicherst oder innerhalb einer Prozedur in einer static Variablen.

Das ist eher eine Frage der Philosophie / des Aufbaus und an welchen Stellen du die ID benötigst. Wenn es nur an dieser einen Stelle ist, dann hat eine Static Variable den Vorteil, dass Sie auch nur dort verfügbar ist, quasi gekapselt wird.
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Image innerhalb einer Procedure löschen?

Beitrag von Velindos »

Hallo, Danke für deinen Tip! Das wollt ich wissen!

Gruss ... Velindos!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Antworten