none
roue de couleur

    Question

  • Bonjours,

    Je voudrais savoir comment peut on récupérer la couleur d'un pixel sur lequel on click (en clair, j'ai importé une image de roue de couleur via une pictureBox et je voudrais obtenir le code RGB de la couleur a l'emplacement ou je click)

    Merci d'avance

    lundi 2 janvier 2017 11:26

Réponses

  • Bonjour,

    Voici le code : 

    PropertyInfo imageRectangleProperty = typeof(PictureBox).GetProperty("ImageRectangle", BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Instance);
    
    private void pictureBox1_Click(object sender, EventArgs e)
    {
        if (pictureBox1.Image != null)
        {
            MouseEventArgs me = (MouseEventArgs)e;
    
            Bitmap original = (Bitmap)pictureBox1.Image;
    
            Color? color = null;
            switch (pictureBox1.SizeMode)
            {
                case PictureBoxSizeMode.Normal:
                case PictureBoxSizeMode.AutoSize:
                    {
                        color = original.GetPixel(me.X, me.Y);
                        break;
                    }
                case PictureBoxSizeMode.CenterImage:
                case PictureBoxSizeMode.StretchImage:
                case PictureBoxSizeMode.Zoom:
                    {
                        Rectangle rectangle = (Rectangle)imageRectangleProperty.GetValue(pictureBox1, null);
                        if (rectangle.Contains(me.Location))
                        {
                            using (Bitmap copy = new Bitmap(pictureBox1.ClientSize.Width, pictureBox1.ClientSize.Height))
                            {
                                using (Graphics g = Graphics.FromImage(copy))
                                {
                                    g.DrawImage(pictureBox1.Image, rectangle);
    
                                    color = copy.GetPixel(me.X, me.Y);
                                }
                            }
                        }
                        break;
                    }
            }
    
            if (!color.HasValue)
            {
                //L'utilisateur a cliqué en dehors de l'image
            }
            else
            { 
                //Utilisation de color.Value qui est la couleur sélectionnée
            }
        }
    }

    J'espère que j'ai bien répondu à votre question.

    Si c'est le cas, n'hésitez pas à mettre ma réponse en réponse à votre post

    Vous pouvez me suivre sur Twitter : https://twitter.com/NordineMhoumadi


    Please remember to close your threads by marking helpful posts as answer and then start a new thread if you have a new question. Please don't ask several questions in the same thread. SVP utiliser le Marquer comme reponse; sur les reponses qui vous aide car cela permet aux personnes qui peuvent rencontrer le meme probleme que vous, de retrouver rapidement quelle est la reponse qui a resolu leur probleme. De plus, cela encourage aussi la personne qui a repondu a votre question, et de repondre aux suivantes...

    • Marqué comme réponse Skygloomy lundi 2 janvier 2017 14:25
    lundi 2 janvier 2017 12:33

Toutes les réponses

  • Bonjour,

    Voici le code : 

    PropertyInfo imageRectangleProperty = typeof(PictureBox).GetProperty("ImageRectangle", BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Instance);
    
    private void pictureBox1_Click(object sender, EventArgs e)
    {
        if (pictureBox1.Image != null)
        {
            MouseEventArgs me = (MouseEventArgs)e;
    
            Bitmap original = (Bitmap)pictureBox1.Image;
    
            Color? color = null;
            switch (pictureBox1.SizeMode)
            {
                case PictureBoxSizeMode.Normal:
                case PictureBoxSizeMode.AutoSize:
                    {
                        color = original.GetPixel(me.X, me.Y);
                        break;
                    }
                case PictureBoxSizeMode.CenterImage:
                case PictureBoxSizeMode.StretchImage:
                case PictureBoxSizeMode.Zoom:
                    {
                        Rectangle rectangle = (Rectangle)imageRectangleProperty.GetValue(pictureBox1, null);
                        if (rectangle.Contains(me.Location))
                        {
                            using (Bitmap copy = new Bitmap(pictureBox1.ClientSize.Width, pictureBox1.ClientSize.Height))
                            {
                                using (Graphics g = Graphics.FromImage(copy))
                                {
                                    g.DrawImage(pictureBox1.Image, rectangle);
    
                                    color = copy.GetPixel(me.X, me.Y);
                                }
                            }
                        }
                        break;
                    }
            }
    
            if (!color.HasValue)
            {
                //L'utilisateur a cliqué en dehors de l'image
            }
            else
            { 
                //Utilisation de color.Value qui est la couleur sélectionnée
            }
        }
    }

    J'espère que j'ai bien répondu à votre question.

    Si c'est le cas, n'hésitez pas à mettre ma réponse en réponse à votre post

    Vous pouvez me suivre sur Twitter : https://twitter.com/NordineMhoumadi


    Please remember to close your threads by marking helpful posts as answer and then start a new thread if you have a new question. Please don't ask several questions in the same thread. SVP utiliser le Marquer comme reponse; sur les reponses qui vous aide car cela permet aux personnes qui peuvent rencontrer le meme probleme que vous, de retrouver rapidement quelle est la reponse qui a resolu leur probleme. De plus, cela encourage aussi la personne qui a repondu a votre question, et de repondre aux suivantes...

    • Marqué comme réponse Skygloomy lundi 2 janvier 2017 14:25
    lundi 2 janvier 2017 12:33
  • Merci beaucoup,

    Je vais essayer ça tout de suite

    lundi 2 janvier 2017 13:21
  • Très bien !

    N'oubliez pas de mettre ma réponse en "Réponse" à votre post pour qu'il soit cloturé et qu'il puisse aider les personnes qui auront la même problématique.

    Merci d'avance


    Please remember to close your threads by marking helpful posts as answer and then start a new thread if you have a new question. Please don't ask several questions in the same thread. SVP utiliser le Marquer comme reponse; sur les reponses qui vous aide car cela permet aux personnes qui peuvent rencontrer le meme probleme que vous, de retrouver rapidement quelle est la reponse qui a resolu leur probleme. De plus, cela encourage aussi la personne qui a repondu a votre question, et de repondre aux suivantes...

    lundi 2 janvier 2017 13:35