モニター上のピクセルの色の決定: 総合ガイド
画面ピクセル上の特定の色を効果的に検出し、後続のアクションをトリガーするには、関連する技術的な内容を理解することが不可欠です。この記事では、このタスクを達成するための非常に効率的なアプローチを紹介します。
RGB 入門
RGB カラー モデルは、定義するために赤、緑、青のコンポーネントに値を割り当てます。特定の色。各コンポーネントの範囲は 0 ~ 255 で、幅広い色相が可能です。
ピクセル カラーのキャプチャ
このプロセスの重要なステップは、選択した色のカラーをキャプチャすることです。モニター上のピクセル。これは、以下に示す GetColorAt() 関数を使用して実現できます。
public Color GetColorAt(Point location) { // Create a bitmap of 1x1 pixel Bitmap screenPixel = new Bitmap(1, 1, PixelFormat.Format32bppArgb); // Get the graphics contexts for both the screen pixel and a temporary DC using (Graphics gdest = Graphics.FromImage(screenPixel)) using (Graphics gsrc = Graphics.FromHwnd(IntPtr.Zero)) { // Obtain the device context handles IntPtr hSrcDC = gsrc.GetHdc(); IntPtr hDC = gdest.GetHdc(); // Execute a bit-block transfer to capture the specified pixel BitBlt(hDC, 0, 0, 1, 1, hSrcDC, location.X, location.Y, (int)CopyPixelOperation.SourceCopy); // Release the device context handles gdest.ReleaseHdc(); gsrc.ReleaseHdc(); } // Retrieve the color of the captured pixel return screenPixel.GetPixel(0, 0); }
この関数は、一時的なビットマップを作成し、ビットブロック転送を実行することで、指定されたピクセルの色を効果的にキャプチャします。 .
リアルタイム ピクセルポーリング
ピクセルの色をキャプチャできるようになったら、特定のピクセルの色を継続的にチェックするループを実装できます。
private void PollPixel(Point location, Color color) { while(true) { var c = GetColorAt(location); if (c.R == color.R && c.G == color.G && c.B == color.B) { // Pixel color matches the target color, perform desired action DoAction(); return; } // Slight yield to other applications Thread.Sleep(); } }
このループは継続的にピクセルの色を取得します。指定されたピクセルをターゲットカラーと比較します。一致すると、意図したアクションがトリガーされます。より細かく制御するには、このループを別のスレッドでラップするか、コンソール アプリケーション内で利用できます。
以上がモニター上の特定のピクセルの色をプログラムで検出して応答するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。