API GetBkColor および GetSysColor(COLOR_WINDOW) を使用してウィンドウの色を取得しようとしていますが、間違った値が返されます。ツールを使用してウィンドウの色を取得すると、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
。これは、いくつかのピクセルをサンプリングするのには問題ありませんが、ウィンドウ内のすべてのピクセルを何億回も読み取ろうとしないでください。それには遅すぎます。