我正在尝试使用API GetBkColor和GetSysColor(COLOR_WINDOW)来获取窗口的颜色,但它给了我错误的值。 当我通过使用某种工具获得wndow的颜色时,它与我从API获得的颜色不同。
有关如何获得正确的颜色值的任何建议吗?
如果窗口使用渐变颜色,那么如何在特定像素处找到颜色?
答案 0 :(得分:2)
GetBkColor在成功时返回当前背景颜色的COLORREF值。要获取颜色的红色,绿色和蓝色组件,请分别使用GetRValue,GetGValue和GetBValue宏。那你需要什么?或者你的意思是什么样的“正确价值”?
要获得像素颜色,请使用GetPixel功能:
COLORREF color;
HDC hdc_ = GetDC(NULL); //get dc of whole screen
color = GetPixel(hdc_, x, y);
希望这会以某种方式帮助你。
答案 1 :(得分:0)
GetBkColor
告诉您文本的当前背景颜色,但窗口可能会在绘制时更改它,因此这不会为您提供值。
GetSysColor(COLOR_WINDOW)
是窗口的推荐默认颜色,但许多窗口选择不同的颜色。您可以尝试获取窗口的WNDCLASS
并检查hbrBackground
字段,但并非所有窗口都依赖该机制来设置其背景颜色。
要获取特定像素的颜色,您可以使用GetPixel
。这对于几个像素的采样是很好的,但是不要试图通过调用这个数字来读取窗口中的每个像素 - 它太慢了。