Problème gestion souri

jacojacque Messages postés 10 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 25 juillet 2011 - 20 juin 2007 à 17:04
jacojacque Messages postés 10 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 25 juillet 2011 - 21 juin 2007 à 12:02
Je suis débutant en C#
Voilà, je voudrais gérer avec la souri en cliquant sur un bouton "zoom" qu'il m'affiche un cadre carré qui suit la souri lorsque je suis sur l'image qui ce trouve dans un panel et lorsque je clic sur l'image la zone qui ce trouve dans le cadre soit zoomé.
Le problème est que je suis débutant en C# et je n'arrive qu'à faire un rectangle colorié pour l'instant en dehors du panel.
Si quelqu'un pouvais m'aider et me dire comment faire :
    - lorsque je clic sur le bouton "zoom" qu'il m'affiche un cadre autour de la souri lorsque je suis sur le panel
    - et lorsque je clic sur l'image qu'il m'affiche la partie de l'image qui se trouve dans le cadre de zoom soit agrandi à la grandeur de mon panel d'origine

6 réponses

jacojacque Messages postés 10 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 25 juillet 2011
20 juin 2007 à 17:35
J'ai oublié si ce n'est pas possible d'afficher un cadre qui suit la souri pour selectionner la zone à zoomer, peut être qu'en double-cliquant sur la partie de l'image à zoomer c'est plus facile mais là aussi je n'y arrive pas, car je n'arrive pas à gérer la souri.
Donc si quelqu'un pouvait m'aider ça serait sympa.
0
cs_niky Messages postés 168 Date d'inscription jeudi 28 juin 2001 Statut Membre Dernière intervention 18 octobre 2008 7
20 juin 2007 à 19:37
Pour afficher un cadre sous la souris, je vois deux solutions :
- soit tu changes le pointeur de la souris
- soit tu gères tout toi même.

Pour la seconde solution, tu gères la souris avec les événements MouseMove, MouseDown et MouseUp du panel.
Pour afficher un cadre sous la souris, il te faut utiliser l'événement Paint du panel.

Dans les événements de la souris, tu peux récupérer la position du curseur en utilisant le paramètre "e" : e.X et e.Y.
Pour forcer le panel à se redessiner, tu fais appel à la méthode Invalidate du panel (par exemple, tu peux réactualiser à chaque événement MouseMove).
Lorsque le panel doit être redessiné, c'est l'événement Paint qui est déclenché. Dans cet événement, tu as un paramètre "e" dans lequel tu peux récupérer un objet Graphics : e.Graphics.
Avec cet objet, tu peux dessiner le panel : e.Graphics.Clear, e.Graphics.DrawImage, e.Graphics.DrawRectangle.
Je t'invite à regarder les classes System.Drawing.Color, System.Drawing.Pens, System.Drawing.Pen pour dessiner.

DrawImage te permet de spécifier la position (X, Y) de l'image à dessiner sur l'écran mais aussi ses dimensions (Width, Height). Ca devrait te permettre de faire un zoom.
0
jacojacque Messages postés 10 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 25 juillet 2011
21 juin 2007 à 10:23
Voilà je n'arrive toujours pas à dessiner un simple rectangle plein sur mon panel, voilà mon code:

dans InitializeComponent()
j'ai mon panel :
            //
            // pictImg
            //
            this.pictImg.Cursor = System.Windows.Forms.Cursors.Cross;
            this.pictImg.Location = new System.Drawing.Point(233, 12);
            this.pictImg.Name = "pictImg";
            this.Paint += new System.Windows.Forms.PaintEventHandler(this.pictImg_Paint);
            this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pictImg_MouseUp);
            this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictImg_MouseMove);
            this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictImg_MouseDown);
            this.pictImg.Size = new System.Drawing.Size(512, 512);
            this.pictImg.TabIndex = 29;
            this.pictImg.TabStop = false;

dans mon Form1.cs j'ai :
        private void pictImg_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
        {
            e.Graphics.FillRectangle(new SolidBrush(Color.DarkRed), rec);
        }
        private void pictImg_MouseDown(Object sender, System.Windows.Forms.MouseEventHandler e)
        {
            if (!click)
            {
                click = true;
                rec = new Rectangle(new Point(e.X, e.Y), new Size(0,0));
                Invalidate();
            }
        }
        private void pictImg_MouseUp(Object sender, System.Windows.Forms.MouseEventHandler e)
        {
            click = false;
        }
        private void pictImg_MouseMove(Object sender, System.Windows.Forms.MouseEventHandler e)
        {
            if (click)
            {
                rec = new Rectangle(rec.X, rec.Y, e.X - rec.X, e.Y - rec.Y);
                Invalidate();
            }
        }

mais voilà ça ne marche pas et je ne sais pas ce qu'il faut faire pour que cela marche.
Je peut seulement dessiner un rectangle en dehors du panel mais pas sur le panel et je n'ai pas trouver ce qu'il fallait que je change pour que ça marche seulement sur le panel où il y a mon image

Donc si quelqu'un pouvait m'aider et me dire qu'est ce qu'il ne va pas et par quoi il faut que je le remplace pour que ça marche
0
cs_niky Messages postés 168 Date d'inscription jeudi 28 juin 2001 Statut Membre Dernière intervention 18 octobre 2008 7
21 juin 2007 à 10:33
Pour des questions de perfs, je te recommande de faire plutôt pictImg.Invalidate(). Ca évite à te feuille d'être aussi invalidée.

Si le rectangle ne s'affiche pas, c'est à priori normal : tu lui donnes un taille de 0 par 0. Essaye au moins 1 par 1.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jacojacque Messages postés 10 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 25 juillet 2011
21 juin 2007 à 10:54
Le rectangle ne se dessine plus en dehors du panel, mais même avec 1 par 1 pour sa taille le rectangle ne se dessine toujours pas sur le panel.
0
jacojacque Messages postés 10 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 25 juillet 2011
21 juin 2007 à 12:02
Ce que je voudrai faire c'est dessiner le cadre d'un carré sur une zone de l'image pour zoomer cette partie de l'image et l'afficher dans ce même panel et étant débutant en c# je ne sais pas comment faire pour afficher le cadre du carré de la partie que je veut zoomer et comment faire pour zoomer cette partie de l'image pour que ça prenne toute la grandeur de mon panel.
Merci d'avance pour ceux qui peuvent m'aider.
0