Problème avec DrawImage()

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Problème avec DrawImage()

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Re: Problème avec DrawImage()

Message 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+
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Problème avec DrawImage()

Message 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 ^^
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Problème avec DrawImage()

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Répondre