2

我正在尝试使用 API GetBkColor 和 GetSysColor(COLOR_WINDOW) 来获取窗口的颜色,但它给了我错误的值。当我通过使用某些工具获得 wndow 的颜色时,它与我从 API 获得的不同。

关于如何获得正确的颜色价值的任何建议?

如果窗口使用渐变颜色,那么如何找到特定像素的颜色?

4

2 回答 2

2

GetBkColor 在成功时返回当前背景颜色的COLORREF值。要获取颜色的红色、绿色和蓝色分量,请分别使用 GetRValue、GetGValue 和 GetBValue 宏。那是你需要的吗?或者你的意思是什么“正确的价值”?

要获取像素颜色,请使用GetPixel函数:

COLORREF color;
HDC hdc_ = GetDC(NULL); //get dc of whole screen
color = GetPixel(hdc_, x, y);

希望这会以某种方式帮助你。

于 2012-09-17T13:54:32.257 回答
0

GetBkColor告诉您文本的当前背景颜色,但窗口可能会在绘制时更改它,因此这不会为您提供值。

GetSysColor(COLOR_WINDOW)是给定当前配色方案的窗口推荐的默认颜色,但许多窗口选择不同的颜色。您可以尝试获取WNDCLASS窗口并检查该hbrBackground字段,但并非所有窗口都依赖该机制来设置其背景颜色。

要获取特定像素的颜色,您可以使用GetPixel. 这对于采样几个像素很好,但不要试图通过调用这个来读取窗口中的每个像素 - 这太慢了。

于 2012-09-17T15:59:14.293 回答