Page 1 sur 2

Afficher une image choisie dans le disque dur...

Publié : mar. 20/mars/2007 18:32
par macsou
Bonjour, c'est encore moi ! ;)
J'ai un probleme, c'est que je n'arrive pas à affichier l'image que l'on choisi dans le disque dur...
Voilà mon code ( il doit y avoir quelques erreurs, ça ne fait que quelques heures que j'ai commencé )

Code : Tout sélectionner

;- Constants
;
Enumeration
  #Window_0
  #WindowWidth = 300
  #WindowHeight = 68
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Text_1
  #gadget_bouton_quitter = 1
  #gadget_bouton_parcourir
  #gadget_bouton_reezizer
EndEnumeration

;- StatusBar Constants
;
Enumeration
  #StatusBar_2
EndEnumeration

Procedure Open_Window_0()
  If   OpenWindow   (  #Window_0  , 0, 0, 245, 343,  "Reezizer"   ,  #PB_Window_SystemMenu  |  #PB_Window_WindowCentered ) 
     
      If CreateStatusBar(#StatusBar_2, WindowID(#Window_0))
      EndIf
        
        If CreateGadgetList ( WindowID ( #Window_0 ))
             ButtonGadget ( #gadget_bouton_parcourir , 30, 45 ,180, 20, "Parcourir" )
             ButtonGadget ( #gadget_bouton_reezizer , 30, 275 ,180, 20, "Reezizer" )
             ButtonGadget ( #gadget_bouton_quitter , 30, 295 ,180, 20, "Quitter" )      
             TextGadget(#Text_1, 40, 10, 170, 30, "Choisissez votre image ( .png, .gif, .jpg, .bmp seulement ! )", #PB_Text_Center)
        EndIf
        
  EndIf
EndProcedure

Open_Window_0()

Repeat
    Event = WaitWindowEvent ()
     ; Mettre ici la gestion des évènements
     If Event = #PB_Event_Gadget
         Select EventGadget () ; boutons, zone de texte, ...
             Case #gadget_bouton_quitter
                Event = #PB_Event_CloseWindow ; on stocke dans event l'évènement quitter, ainsi l'appui sur le bouton quitter rvient à l'appui sur la croix
             Case #gadget_bouton_parcourir
                ImageName$ = OpenFileRequester("Choisissez l'image que vous voulez redimensionner", "", "Image files|*.gif;*.png;*.jpg;*.bmp|All Files|*.*", 0)
             If ImageName$
              If LoadImage(0, ImageName$)
              DrawImage(Image, #PB_Ignore, #PB_Ignore ) 
                ImageLoaded = 1 
                ImageState  = 0
              EndIf
                StatusBarText(0, 0, "Image '"+ImageName$+"' chargée", 0)
              Else
                StatusBarText(0, 0, "Impossible d'affichier l'image '"+ImageName$+"'", 0)
              EndIf

         EndSelect  
     EndIf
Until Event = #PB_Event_CloseWindow
Donc si vous testez ça, ça va marquer dans la barre de statut que l'image est chargée, mais l'image n'apparait pas ( et si j'ouvre une image en BMP ça plante et je dois appuyer sur la tête de mort )
Le programme n'est pas fini, c'est pour ça que le bouton "reezizer" ne fonctionne pas, si j'arrive à afficher l'image je pourrai continuer :D

Publié : mar. 20/mars/2007 18:58
par Flype
Salut,

En fait, il faut mettre ton image dans un gadget (ImageGadget) sinon il s'efface dès que ta fenetre est survolé par une autre.

Ceci dit tu peux utiliser DrawImage() sur une fenetre. Ca n'empeche pas.
Sauf qu'il faudra la redessiner à chaque fois que ta fenetre sera survolé.

Regarde d'abord la premiere méthode (avec un ImageGadget) - je te laisse peaufiner :

Code : Tout sélectionner

;- Constants
;
Enumeration
  #Window_0
  #WindowWidth = 300
  #WindowHeight = 68
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Text_1
  #Image_0 ;/////////////////// rajout
  #gadget_bouton_quitter = 1
  #gadget_bouton_parcourir
  #gadget_bouton_reezizer
EndEnumeration

;- StatusBar Constants
;
Enumeration
  #StatusBar_2
EndEnumeration

Procedure Open_Window_0()
  If OpenWindow(  #Window_0  , 0, 0, 245, 343,  "Reezizer"   ,  #PB_Window_SystemMenu  |  #PB_Window_WindowCentered )
    
    If CreateStatusBar(#StatusBar_2, WindowID(#Window_0))
      AddStatusBarField(245) ;/////////////////// rajout
    EndIf
    
    If CreateGadgetList ( WindowID ( #Window_0 ))
      ButtonGadget ( #gadget_bouton_parcourir , 30, 45 ,180, 20, "Parcourir" )
      ButtonGadget ( #gadget_bouton_reezizer , 30, 295 ,180, 20, "Reezizer" )
      ButtonGadget ( #gadget_bouton_quitter , 30, 295 ,180, 20, "Quitter" )     
      TextGadget(#Text_1, 40, 10, 170, 30, "Choisissez votre image ( .png, .gif, .jpg, .bmp seulement ! )", #PB_Text_Center)
      ImageGadget(#Image_0, 10, 75, 225, 210, 0, #PB_Image_Border) ;/////////////////// rajout
    EndIf
    
  EndIf
EndProcedure

UsePNGImageDecoder()
UseJPEGImageDecoder()

Open_Window_0()

Repeat
  Event = WaitWindowEvent ()
  ; Mettre ici la gestion des évènements
  If Event = #PB_Event_Gadget
    Select EventGadget () ; boutons, zone de texte, ...
      Case #gadget_bouton_quitter
        Event = #PB_Event_CloseWindow ; on stocke dans event l'évènement quitter, ainsi l'appui sur le bouton quitter rvient à l'appui sur la croix
      Case #gadget_bouton_reezizer ;/////////////////// rajout
        If IsImage(0)
          ResizeImage(0, 100, 100)
          SetGadgetState(#Image_0, ImageID(0))
        EndIf
        
      Case #gadget_bouton_parcourir
        ImageName$ = OpenFileRequester("Choisissez l'image que vous voulez redimensionner", "", "Image files|*.gif;*.png;*.jpg;*.bmp|All Files|*.*", 0)
        If ImageName$
          If LoadImage(0, ImageName$)
            SetGadgetState(#Image_0, ImageID(0)) ;/////////////////// rajout
            ImageLoaded = 1
            ImageState  = 0
          EndIf
          StatusBarText(0, 0, "Image '"+GetFilePart(ImageName$)+"' chargée", 0)
        Else
          StatusBarText(0, 0, "Impossible d'affichier l'image '"+GetFilePart(ImageName$)+"'", 0)
        EndIf
        
    EndSelect 
  EndIf
Until Event = #PB_Event_CloseWindow

Publié : mar. 20/mars/2007 19:13
par macsou
Merci ! ;) Mais quand je compile ton code, j'ai un fatal error MSVCRT.LIB not found :oops: ( je suis sous windows 98 SE si ça peut aider.... )

Publié : mer. 21/mars/2007 12:49
par brossden
Tu peux peut être essayer ce code ?

Code : Tout sélectionner

UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()
;- Constants
;
Enumeration
  #Window_0
  #WindowWidth = 300
  #WindowHeight = 68
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Text_1
  #gadget_bouton_quitter = 1
  #gadget_bouton_parcourir
  #gadget_bouton_resizer
  #StatusBar_2
  #Image_0
EndEnumeration

Procedure Open_Window_0()
  If   OpenWindow   (  #Window_0  , 0, 0, 245, 343,  "Reezizer"   ,  #PB_Window_SystemMenu  |  #PB_Window_WindowCentered )
    
    If CreateStatusBar(#StatusBar_2, WindowID(#Window_0))
    EndIf
    
    If CreateGadgetList ( WindowID ( #Window_0 ))
      ButtonGadget ( #gadget_bouton_parcourir , 30, 45 ,180, 20, "Parcourir" )
      ButtonGadget ( #gadget_bouton_resizer , 30, 275 ,180, 20, "Resizer" )
      ButtonGadget ( #gadget_bouton_quitter , 30, 295 ,180, 20, "Quitter" )     
      TextGadget(#Text_1, 40, 10, 170, 30, "Choisissez votre image ( .png, .gif, .jpg, .bmp seulement ! )", #PB_Text_Center)
    EndIf
    
  EndIf
EndProcedure

Open_Window_0()

Repeat
  Event = WaitWindowEvent ()
  ; Mettre ici la gestion des évènements
  If Event = #PB_Event_Gadget
    Select EventGadget () ; boutons, zone de texte, ...
      Case #gadget_bouton_quitter
        Event = #PB_Event_CloseWindow ; on stocke dans event l'évènement quitter, ainsi l'appui sur le bouton quitter rvient à l'appui sur la croix
      Case #gadget_bouton_parcourir
        ImageName$ = OpenFileRequester("Choisissez l'image que vous voulez redimensionner","", "Image files |*.png;*.jpg;*.bmp | All Files|*.*", 0)
        
        If ImageName$
          Open_Window_0()
          If LoadImage(  #Image_0, ImageName$)
            Ix=ImageWidth(#Image_0) 
            Iy= ImageHeight(#Image_0)
            Rx.f = Ix / 225 
            Ry.f = Iy / 200
            If  Rx>Ry 
            echelle.f = Rx
            Else
            echelle.f = Ry
          EndIf
          X = (225 - Ix/echelle)/2
          Y = (200 - Iy/echelle)/2
            StartDrawing(WindowOutput(#Window_0))
            DrawImage(ImageID(#Image_0),10+X,70+Y ,Ix/echelle,Iy/echelle  )
            StopDrawing() 
            ImageLoaded = 1
            ImageState  = 0
          EndIf
          StatusBarText(0, 0, "Image '"+ImageName$+"' chargée", 0)
        Else
          StatusBarText(0, 0, "Impossible d'affichier l'image '"+ImageName$+"'", 0)
        EndIf
        
    EndSelect 
  EndIf
Until Event = #PB_Event_CloseWindow

Publié : mer. 21/mars/2007 13:06
par macsou
Merci, mais ça me met le même message d'erreur. ;)
J'ai cherché sur le forum à propos de ce problème et j'ai cru comprendre que la LIB manquante n'est pas incluse dans la version démo de purebasic.

Publié : mer. 21/mars/2007 13:12
par brossden
Désolé j'ignorais que tu n'avais pas la version pleine !

Publié : mer. 21/mars/2007 14:12
par Flype
ah oui c'est possible.

et donc le probleme est résolu ?

Publié : mer. 21/mars/2007 14:17
par macsou
Ben non car les deux codes que vous m'avez donné ne veulent pas compiler ! ;)

Publié : mer. 21/mars/2007 14:20
par Flype
bon enfin ca marche sans probleme avec la version complete :wink:

Publié : mer. 21/mars/2007 14:30
par macsou
Oui je sais ;) mais je prefere rester sur la version demo pour l'instant, même si je ne peux pas faire tout ce que je veux :P

Publié : mer. 21/mars/2007 14:35
par Backup
a tu mis le Help au bon endroits ?
ou l'a tu mis ? 8O

(pas dans le Dossier HELP au moins ...)

Publié : mer. 21/mars/2007 14:41
par macsou
HELP ? Comment ça ? :oops: Si tu parles de l'aide du logiciel ( PureBasic.chm ) il est à la racine... ;) mais sinon je n'ai pas de dossier HELP.

Publié : mer. 21/mars/2007 15:14
par Flype
voilà - très bien.

il y a bien un dossier HELP qui se rajoute dans le dossier quand on installe des modules au langage ( les biens nommées UserLibraries ).

mais purebasic.chm doit être à la racine.

Publié : mer. 21/mars/2007 15:24
par macsou
Ah d'accord ! :) Je crois que UserLibraries est vide ( j'avais deja regardé, mais la je ne peux pas car mon pc plante :lol: ), je suppose que c'est normal, étant donné que je n'ai pas installé de modules...

Publié : dim. 25/mars/2007 14:25
par brossden
C'est Macsou ou Picsou ?

La licence de purebasic et vraiment bon marché pour la puissance de la bête, alors, débourse la somme ou je doute que beaucoup de personnes ne s'intersssent à tes problèmes bien longtemps pour braver les limites de la version démo.