C言語プログラミング覚書き
ホーム
覚書き

<スクリーン上の色の取得>

前回に引き続き MyColorChecker のもうひとつの重要な機能である チェックカラーについて説明したいと思います。この機能を実現する為に 使用する API 関数は、GetCursorPos、GetDC、GetPixel、ReleaseDC の 4つです。

まず GetCursorPos で、マウスカーソル(マウスポインタ)の現在位置 を取得します。


    BOOL GetCursorPos(LPPOINT lpPoint);
    

lpPoint にはマウスカーソルの X、Y 座標を受け取る POINT 構造体へ のポインタが入ります。これで取得できるのはスクリーン座標です。今回は スクリーン座標を使用するのでこのままですが、クライアント座標を使用する 場合には、ScreenToClient 関数を使って変換する必要があります。

次に、カラー情報を取得する為に、GetDC でスクリーン全体のデバイス コンテキストのハンドルを取得します。


    HDC GetDC(HWND hWnd);
    

hWnd には、デバイスコンテキストの取得対象となるウィンドウのハンドル を指定します。NULL を指定するとスクリーン全体のデバイスコンテキストの ハンドルを取得することができます。
デバイスコンテキストとは、ディスプレイデバイスやプリンタデバイス などの表示デバイスを仮想化するための Windows のしくみです。くわしくは、 MSDNでお調べください。「デバイスコンテキスト」で検索すると出てきます。

次に、GetPixel を呼び出して、カラー情報を取得します。


    COLORREF GetPixel(HDC hdc,
                      int nXPos,
                      int nYPos);
                      

hdc には GetDC で取得したデバイスコンテキストのハンドルを、 nXPos、nYPos には、GetCursorPos で取得した POINT 構造体のメンバをそれぞれ 引数に与えます。

最後に取得したデバイスコンテキストを ReleaseDC で解放します。


    int ReleaseDC(HWND hWnd,
                  HDC  hDC);

hWnd にはデバイスコンテキストの取得対象となったウィンドウのハンドル、 hDC には GetDC の戻り値を与えます。

それではコーディングしてみましょう。


    POINT    pt;
    HDC      hdc;
    COLORREF crColor;
    
    GetCursorPos(&pt);
    hdc = GetDC(NULL);
    crColor = GetPixel(hdc, pt.x, pt.y);
    ReleaseDC(NULL, hdc);
    





Copyright (c) 2003-2004 HIDEKAZU KAJIURA. All Rights Reserved.