【问题标题】:How to get color of window如何获取窗口的颜色
【发布时间】:2012-09-17 09:22:12
【问题描述】:

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

关于如何获得正确的颜色值有什么建议吗?

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

【问题讨论】:

  • 这是您控制的窗口吗?如果是这样,那么您只需询问您的 WM_PAINT 处理程序它在特定点使用什么颜色。如果不是,那你为什么要弄乱别人的窗户?

标签: c++ winapi gdi


【解决方案1】:

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

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

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

希望这会对您有所帮助。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-12-16
      • 1970-01-01
      • 2012-02-15
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 2014-08-24
      相关资源
      最近更新 更多