Я пытаюсь использовать API GetBkColor и GetSysColor (COLOR_WINDOW), чтобы получить цвет окна, но это дает мне неправильное значение.
Когда я получаю цвет wndow с помощью какого-либо инструмента, он отличается от того, что я получаю от API.
Любое предложение о том, как получить правильное значение цвета?
Если в окне используется градиентный цвет, то как мне найти цвет для определенного пикселя?
GetBkColor возвращает значение COLORREF значение для текущего цвета фона в случае успеха. Чтобы получить красный, зеленый и синий компоненты цвета, используйте макросы GetRValue, GetGValue и GetBValue соответственно. Это то, что вам нужно? ИЛИ что за «правильное значение» вы имеете в виду?
Чтобы получить цвет пикселя, используйте GetPixel функция:
COLORREF color;
HDC hdc_ = GetDC(NULL); //get dc of whole screen
color = GetPixel(hdc_, x, y);
Надеюсь, это поможет вам как-то.
GetBkColor
сообщает текущий цвет фона для текста, но окно может изменить его при рисовании, так что это не даст вам значения.
GetSysColor(COLOR_WINDOW)
является рекомендуемым цветом по умолчанию для окна, учитывая текущую цветовую схему, но многие окна выбирают другой цвет. Вы можете попытаться получить WNDCLASS
для окна и проверьте hbrBackground
поле, но не все окна полагаются на этот механизм для установки его цвета фона.
Чтобы получить цвет в определенном пикселе, вы можете использовать GetPixel
. Это хорошо для выборки пары пикселей, но не пытайтесь прочитать каждый пиксель в окне, называя это миллион раз — это слишком медленно для этого.