Seite 1 von 1

Image innerhalb einer Procedure löschen?

Verfasst: 17.09.2020 12:35
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!

Re: Image innerhalb einer Procedure löschen?

Verfasst: 17.09.2020 17:31
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

Re: Image innerhalb einer Procedure löschen?

Verfasst: 18.09.2020 09:07
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!

Re: Image innerhalb einer Procedure löschen?

Verfasst: 18.09.2020 10:54
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.

Re: Image innerhalb einer Procedure löschen?

Verfasst: 18.09.2020 17:06
von Velindos
Hallo, Danke für deinen Tip! Das wollt ich wissen!

Gruss ... Velindos!