Afficher une image choisie dans le disque dur...

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
macsou
Messages : 10
Inscription : lun. 19/mars/2007 22:41
Localisation : Jura (39)
Contact :

Afficher une image choisie dans le disque dur...

Message 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
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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
macsou
Messages : 10
Inscription : lun. 19/mars/2007 22:41
Localisation : Jura (39)
Contact :

Message 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.... )
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message 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
macsou
Messages : 10
Inscription : lun. 19/mars/2007 22:41
Localisation : Jura (39)
Contact :

Message 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.
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Désolé j'ignorais que tu n'avais pas la version pleine !
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

ah oui c'est possible.

et donc le probleme est résolu ?
macsou
Messages : 10
Inscription : lun. 19/mars/2007 22:41
Localisation : Jura (39)
Contact :

Message par macsou »

Ben non car les deux codes que vous m'avez donné ne veulent pas compiler ! ;)
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

bon enfin ca marche sans probleme avec la version complete :wink:
macsou
Messages : 10
Inscription : lun. 19/mars/2007 22:41
Localisation : Jura (39)
Contact :

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

a tu mis le Help au bon endroits ?
ou l'a tu mis ? 8O

(pas dans le Dossier HELP au moins ...)
macsou
Messages : 10
Inscription : lun. 19/mars/2007 22:41
Localisation : Jura (39)
Contact :

Message 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.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message 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.
macsou
Messages : 10
Inscription : lun. 19/mars/2007 22:41
Localisation : Jura (39)
Contact :

Message 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...
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message 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.
Répondre