Page 1 sur 1

comment charger et gérer des images dans MDIGadgets?

Publié : ven. 21/janv./2011 18:39
par pengel
Bonjour,
Je suis débutant de chez débutant en PB (mais j'ai eu un peu d'expérience en Basic dand mon jeune temps... mais ça date!)
Je n'arrive pas à trouver la façon de charger des images (*.bmp sur mon disque dur) dans des fenêtres "child" créées avec MDIGadget et AddGadgetItem: je me mélange les pinceaux entre les #NuméroRéférence qui peuvent indiquer l'image elle-même, une fenêtre, ou le MDIGadget pour lequel je dois aussi déclarer un numéro de fenêtre à la création... et aussi entre les OpenWindow / OpenFile / CreateImage, etc... En fait, cette notion de Gadget est nouvelle pour moi, et je ne les "cerne" pas bien
Je n'ai pas trouvé de tuto ad hoc - ils ne parlent pas de fichiers image dans les MDIGadgets, mais tous de fenêtres "main window" - et ouvrir un fichier image dans une fenêtre toute seule, j'y arrive :-)
Le but de mon programme est de lire une image, d'en extraire les valeurs RGB, de traiter ces valeurs selon différentes formules, et de "peindre" l'image obtenue (Noir & Blanc) dans une autre fenêtre "Child" avant d'enregistrer le fichier correspondant (sous forme Ascii ou bien Integer, etc.)

Si quelqu'un peut m'orienter vers un tuto qui traite de la gestion des images dans des fenêtres MDIGadget, grand merci!

Re: comment charger et gérer des images dans MDIGadgets?

Publié : mer. 26/janv./2011 18:50
par Ollivier
Bonjour Pengel,

J'ai pris l'exemple se trouvant ici et j'ai rajouté une image.

Code : Tout sélectionner

Wi = 256
He = 192
Img = CreateImage(#PB_Any, Wi, He)
StartDrawing(ImageOutput(Img) )
  Box(0, 0, Wi, He, RGB(1, 1, 254) )
  Box(4, 4, Wi - 8, He - 8, RGB(254, 1, 1) )
StopDrawing()

#FenetrePrincipale = 0
  #FenetreFille = 1
  If OpenWindow(#FenetrePrincipale, 0, 0, 400, 300, "MDIGadget", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget)
    If CreateMenu(#FenetrePrincipale, WindowID(#FenetrePrincipale))
      MenuTitle("Index de menu 0")
      MenuTitle("Menu des fenêtres filles")
        MenuItem(0, "Elément créé soi-même")
        MenuItem(1, "Elément créé soi-même")
        
      MDIGadget(0, 0, 0, 0, 0, 1, 2, #PB_MDI_AutoSize)
      AddGadgetItem(0, #FenetreFille, "Fenêtre fille")
      ResizeWindow(#FenetreFille, #PB_Ignore, #PB_Ignore, Wi, He)      
          ; ajouter des gadgets ici...
          ImageGadget(1, 0, 0, Wi, He, ImageID(Img) )
        UseGadgetList(WindowID(#FenetrePrincipale)) ; retourne à la liste de gadgets de la fenêtre principale
    EndIf
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
  EndIf

Re: comment charger et gérer des images dans MDIGadgets?

Publié : jeu. 27/janv./2011 16:43
par pengel
Impeccable!
Merci beaucoup, ça me permet de mieux comprendre la gestion des #Référence entre fenêtres et gadgets

Re: comment charger et gérer des images dans MDIGadgets?

Publié : jeu. 27/janv./2011 22:49
par Ollivier
Je crois saisir où tu vois une subtilité qui n'a pas réellement lieu d'être. C'est plus simple que ce que je pense que tu imagines actuellement.

1) On dispose, comme dans la plupart des langages du traitement de données: les nombres (entiers ou à virgule) et les chaînes (textes, etc...)

2) Dans notre cas, pour l'explication, on va focaliser sur les nombres entiers. Car ce sont eux qui nous permettent d'identifier grâce à un numéro, n'importe quel objet (image, son, fichier, gadget, process, etc...).

(Remarque: un numéro d'identifiant peut s'apparenter à un handle en anglais)

3) Il existe trois manières de traiter un nombre entier:

3a) Immédiatement :

Code : Tout sélectionner

Debug 37
3b) Via une constante qui est définie une fois pour toute avec une valeur :

Code : Tout sélectionner

#JeSuisUneConstante = 37
Debug #JeSuisUneConstante
3c) Via une variable qui peut être redéfinie à volonté :

Code : Tout sélectionner

JeSuisUneVariable = 37 ; définition
Debug JeSuisUneVariable
JeSuisUneVariable = 1998 ; redéfinition
Debug JeSuisUneVariable
Un exemple de code qui plantera consiste à tenter de changer la valeur d'une constante :

Code : Tout sélectionner

#JeSuisVraimentConstante = 37
Debug #JeSuisVraimentConstante
#JeSuisVraimentConstante = 1998 ; Redéfinition impossible
Debug #JeSuisVraimentConstante
4) Le signe « # » en guise de préfixe devant un nom de donnée indique que la donnée est une constante et non une variable.

5) Conclusion: la subtilité constante/variable n'a strictement rien à voir avec le type d'objet (gadget, fenêtre, image, etc...). Pour exemple: retire le signe # devant #FenetrePrincipale et #FenetreFille dans l'ensemble du code plus haut et ton programme s'exécutera exactement pareil sur le plan fonctionnel.

La seule différence finale est que les instructions traitant les constantes sont légèrement plus rapide que les mêmes instructions traitant les variables.

En espérant avoir cerné ce qui t'a troublé...

Re: comment charger et gérer des images dans MDIGadgets?

Publié : lun. 31/janv./2011 14:29
par pengel
Oui, c'est bien ça qui me posait problème, sans que je sache ou puisse le formuler. Merci pour tes explications!