|
||
解説: 画像や色を扱うアプリケーションを作成すると、スクリーン上の任意の点の色を取り出したい場面があります。 今回はWin32API のGetDC関数でデバイス コンテキストのハンドルを取得し、C++BuilderのTCanvasを利用して指定した画面位置の色を取得してみます。 ちょっと寄り道: HDC GetDC( HWND hWnd // ウィンドウのハンドル ); hWnd:デバイスコンテキストを取得するウィンドウのハンドルを指定。 NULL を指定すると、画面全体を表すデバイスコンテキストが取得できます。 戻り値:関数が成功すると、指定したウィンドウのハンドルが返ります。 関数が失敗すると、NULL が返ります。 使用例: 以下の例では、Edit1にXの座標値をEdit2にYの座標値を入力してButton1をクリックすることで、 画面上の色を取得して、Formをその色に変更しています。 準備としてはEdit二つとButtonを適当に配置するだけです。 OnClickイベントハンドラではオブジェクトのイメージを描画するため、TCanvasを動的に作成します。 作成したcanvasのHandleにGetDCで取得した画面全体を表すデバイスコンテキストのハンドルを指定します。 次にEdit1、Edit2に入力した座標値をPixelsプロパティに渡して、描画表面にある色を取得しています。取得した色をFormに反映させます。 //------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { TCanvas *canvas = new TCanvas(); canvas->Handle = GetDC(0); //スクリーン上の任意の点の色を取り出す TColor color = canvas->Pixels[StrToInt(Edit1->Text)][StrToInt(Edit2->Text)]; //色表示 Color = color; delete canvas; } //------------------------------------------------------------------- |