comment charger et gérer des images dans MDIGadgets?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
pengel
Messages : 3
Inscription : mer. 19/janv./2011 18:02
Localisation : Nîmes

comment charger et gérer des images dans MDIGadgets?

Message 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!
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

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

Message 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
Avatar de l’utilisateur
pengel
Messages : 3
Inscription : mer. 19/janv./2011 18:02
Localisation : Nîmes

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

Message par pengel »

Impeccable!
Merci beaucoup, ça me permet de mieux comprendre la gestion des #Référence entre fenêtres et gadgets
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

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

Message 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é...
Avatar de l’utilisateur
pengel
Messages : 3
Inscription : mer. 19/janv./2011 18:02
Localisation : Nîmes

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

Message par pengel »

Oui, c'est bien ça qui me posait problème, sans que je sache ou puisse le formuler. Merci pour tes explications!
Répondre