Color Blind

Hi everybody. How's it going?

I've come across another problem. This time I need my program to "see" different colors.

Pretty much all I need is a function which tells the color of a single pixel on my screen by using the x-coordinate and the y-coordinate. I hope there is a function like that :P

Coordinates go in.
1
2
3
string color;
TellColor(126, 1024, color);
cout << color;

Color comes out.
Green


I did some searching though and I found a great function called GetPixel, but as far as I can know it can only tell colors from a image file. Correct me if I'm wrong.

Any help is appreciated.
Last edited on
closed account (3pj6b7Xj)
Taken from the Win32/API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
The GetPixel function retrieves the red, green, blue (RGB) color value of the
pixel at the specified coordinates. 

COLORREF GetPixel(

    HDC hdc,	// handle of device context  
    int XPos,	// x-coordinate of pixel 
    int nYPos 	// y-coordinate of pixel 
   );	
 

Parameters

hdc

Identifies the device context. 

nXPos

Specifies the logical x-coordinate of the pixel to be examined. 

nYPos

Specifies the logical y-coordinate of the pixel to be examined. 

 

Return Values

If the function succeeds, the return value is an RGB value. If the pixel is outside of the
current clipping region, the return value is CLR_INVALID. 

Remarks

The pixel must be within the boundaries of the current clipping region. 
Not all devices support GetPixel. An application should call GetDeviceCaps to determine
whether a specified device supports this function. 

See Also

GetDeviceCaps, SetPixel


Hope it helps.
Last edited on
Alright!
It's exactly what I was looking for but, how do you initialize the variable "hdc"?

Thanks a million!
Use the GetDC function.

1
2
3
4
5
// Retrieve from coordinates relative to a window
hDC = GetDC(hWnd);

// Retrieve from coordinates relative to the full screen
hDC = GetDC(NULL);


When you're done, make sure to release it!
ReleaseDC(hDC);
closed account (3pj6b7Xj)
In theory if you are getting a pixel, that means you are handling a paint operation......it would look like this in code...

1
2
3
4
5
6
7
8
9
10
11
12
13
case WM_PAINT:
{
    PAINTBRUSH ps;
    HDC hDC=BeginPaint(hWnd,&ps);
    
    // Get the color of the pixel.
    COLORREF PixelColor=GetPixel(hDC,10,10);
    
    // Rest of program code...
    
    EndPaint(hWnd,&ps);
    break;
}


Some systems don't support GetPixel() dinosaur systems that is and by the way, GetPixel() eats up a considerable amount of resources. GetPixel() is what I used in my Squibbles game to implement object collisions.
Thank you.
Topic archived. No new replies allowed.