Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Get the Color based on  a cursor click

Posted on 2009-04-01
5
Medium Priority
?
491 Views
Last Modified: 2012-05-06
Is there a way to get the color that the mouse was pointing at when clicked.
I have a picturebox with a background image in it. I wish to know the color of the spot at which the cursor was clicked with the image.

Thanks,
0
Comment
Question by:SRabidou
  • 3
5 Comments
 
LVL 64

Accepted Solution

by:
Fernando Soto earned 2000 total points
ID: 24044188
Hi SRabidou;

When you create the Image for the pictureBox create it as a Bitmap. This will allow you to use the Bitmap.GetPixel method to get the color under the cursor when clicked. See code snippet below.

Fernando
private void Form1_Load(object sender, EventArgs e)
{
    // Load the Image into a Bitmap object
    Bitmap bmap = new Bitmap(Image.FromFile(@"C:\Temp\imageDownloaded.jpg"));
    // Assign the Bitmap to the PictureBox.Image property
    pictureBox1.Image = bmap;
}
 
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
    // Cast PictureBox.Image property to Bitmap and get the color 
    // of the pixel from the GetPixel method of the Bitmap
    Color color = ((Bitmap)pictureBox1.Image).GetPixel(e.X, e.Y);
}

Open in new window

0
 
LVL 86

Expert Comment

by:Mike Tomlinson
ID: 24045490
That may not work properly if the image is being STRETCHED as the coords in the form will not match the coords in the bitmap...

You can use the GetPixel() API, though, to get the color directly off the SCREEN:
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        [StructLayout(LayoutKind.Sequential)]
        public struct COLORRGBA
        {
            public byte r;
            public byte g;
            public byte b;
            public byte a;
        }
 
        [DllImport("user32.dll", EntryPoint = "GetDesktopWindow")]
        public static extern IntPtr GetDesktopWindow();
        [DllImport("user32.dll")]
        static extern IntPtr GetWindowDC(IntPtr ptr);
        [DllImport("gdi32.dll")]
        static extern COLORRGBA GetPixel(IntPtr hdc, int x, int y);
        [DllImport("user32.dll")]
        static extern int ReleaseDC(IntPtr hwnd, IntPtr hdc);
 
        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            IntPtr deskWnd = GetDesktopWindow();
            IntPtr deskHDC = GetWindowDC(deskWnd);
            COLORRGBA c = GetPixel(deskHDC, Cursor.Position.X, Cursor.Position.Y);
            ReleaseDC(deskWnd, deskHDC);
            label1.Text = Color.FromArgb(c.a,c.r,c.g,c.b).ToString();
        }
 
    }

Open in new window

0
 
LVL 64

Expert Comment

by:Fernando Soto
ID: 24046601
Idle_Mind is correct if the picturebox SizeMode is not set to Normal it will give wrong values or throw an exception with the X or Y values fall outsize the image size.
0
 

Author Closing Comment

by:SRabidou
ID: 31565536
Great solution. I'm not expecting to have the "streching issue" that Idle Mind referred to but that soultion was well done as well but a little difficult to understand.
0
 
LVL 64

Expert Comment

by:Fernando Soto
ID: 24071608
Glad I was able to help.  ;=)
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article is for Object-Oriented Programming (OOP) beginners. An Interface contains declarations of events, indexers, methods and/or properties. Any class which implements the Interface should provide the concrete implementation for each Inter…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
this video summaries big data hadoop online training demo (http://onlineitguru.com/big-data-hadoop-online-training-placement.html) , and covers basics in big data hadoop .
Look below the covers at a subform control , and the form that is inside it. Explore properties and see how easy it is to aggregate, get statistics, and synchronize results for your data. A Microsoft Access subform is used to show relevant calcul…

927 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question