Page 1 sur 1

Problème avec DrawImage()

Publié : lun. 08/août/2011 13:03
par GallyHC
Bonjour tous,

Une chose que je ne comprend pas vraiment. J’utilise un code comme suit (j’ai decouper pour que cela fontionne, il y a surement des variables non utiliser).

Code : Tout sélectionner

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

EnableExplicit

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Enumeration
  #Windows_0
EndEnumeration
Enumeration
  #Gadget_0
  #Gadget_1
EndEnumeration

Global stime.s   = "" 

UsePNGImageDecoder()

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Procedure Draw_Screen()
;
  If CreateImage(#Gadget_0, 551, 395)
    If StartDrawing(ImageOutput(#Gadget_0))
      DrawImage(ImageID(CatchImage(#PB_Any, ?maximenu01)), 0, 0)
      DrawText(365, 176, "Mise à Jour : ", $00FFFF)
      DrawText(455, 176, stime, $FFFFFF)
      StopDrawing()
    EndIf
    SetGadgetState(#Gadget_0, ImageID(#Gadget_0))
    FreeImage(#Gadget_0)
  EndIf

EndProcedure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Define i.l
Define event.l
Define lTime.l
Define stemp.s
Define DefTread.l
Define TimeOut.l = (5 * 60) * 1000
If OpenWindow(#Windows_0, 0, 0, 561, 406, "test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  SetWindowColor(#Windows_0, $008038)
  
  ImageGadget(#Gadget_0, 5, 5,   551, 395, 0)

  lTime = ElapsedMilliseconds()
  Repeat
    event = WaitWindowEvent(50)
    If ElapsedMilliseconds() - lTime > TimeOut
      ; ENVOIS UNE ACTION  
    Else
      stime = FormatDate("%hh:%ii:%ss", (TimeOut - (ElapsedMilliseconds() - lTime))/1000)
      If stime <> stemp
        stemp = stime
        Draw_Screen()
      EndIf
    EndIf
  Until event = #PB_Event_CloseWindow
EndIf

DataSection
  maximenu01: IncludeBinary "includes\datas\background02.png"
EndDataSection
La mémoire d’utilisation ne fait qu’augmenter a moin que je retire :

Code : Tout sélectionner

DrawImage(ImageID(CatchImage(#PB_Any, ?maximenu01)), 0, 0)
Alors je ne comprend pas comment faire pour avoir une utilisation mémoire stable ?

Cordialement,
GallyHC

Re: Problème avec DrawImage()

Publié : lun. 08/août/2011 13:28
par Cls
Salut,

il faut "catcher" l'image une seule fois, et non le mettre dans le boucle.
Tu peux le faire en tout début de programme et stocker l'identifiant de ton/tes image(s) dans une map ou une liste chainée.

Code : Tout sélectionner

CatchImage(#PB_Any, ?maximenu01)
A+

Re: Problème avec DrawImage()

Publié : lun. 08/août/2011 14:31
par graph100
effectivement, la commande CatchImage() fait une copie de l'image en mémoire. Il ne faut donc la faire qu'une seule fois sinon tu fais plein de copie différentes ^^

Re: Problème avec DrawImage()

Publié : lun. 08/août/2011 14:45
par GallyHC
Ok et merci pour l'info, je comprend mieu les probs d'un soft que je fait actuellement... J'ai pas mal de modif a faire.

Cordialement,
GallyHC