ホームページ > バックエンド開発 > C++ > 画面ピクセルの色の変化を検出してイベントをトリガーするにはどうすればよいですか?

画面ピクセルの色の変化を検出してイベントをトリガーするにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-31 03:38:10
オリジナル
508 人が閲覧しました

How Can I Detect Screen Pixel Color Changes and Trigger Events?

イベントトリガーの画面ピクセル色の読み取り

問題ステートメント:

特定の色をキャプチャする方法の決定画面のピクセルと、検出されたデータに基づいてイベントをトリガーするcolor.

解決策:

最も効率的な手法には、カーソル位置のピクセルをキャプチャし、複数のモニター間の互換性を確保することが含まれます。

詳細実装:

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace ScreenPixelReader
{
    public partial class Form1 : Form
    {
        [DllImport("user32.dll")]
        static extern bool GetCursorPos(ref Point lpPoint);

        [DllImport("gdi32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
        public static extern int BitBlt(IntPtr hDC, int x, int y, int nWidth, int nHeight, IntPtr hSrcDC, int xSrc, int ySrc, int dwRop);

        public Form1()
        {
            InitializeComponent();
        }

        private void MouseMoveTimer_Tick(object sender, EventArgs e)
        {
            Point cursor = new Point();
            GetCursorPos(ref cursor);

            var c = GetColorAt(cursor);
            this.BackColor = c;

            if (c.R == c.G && c.G < 64 && c.B > 128)
            {
                MessageBox.Show("Blue");
            }
        }

        Bitmap screenPixel = new Bitmap(1, 1, PixelFormat.Format32bppArgb);
        public Color GetColorAt(Point location)
        {
            // Create off-screen bitmaps for capturing screen pixels
            using (Graphics gdest = Graphics.FromImage(screenPixel))
            using (Graphics gsrc = Graphics.FromHwnd(IntPtr.Zero))
            {
                IntPtr hSrcDC = gsrc.GetHdc();
                IntPtr hDC = gdest.GetHdc();
                int retval = BitBlt(hDC, 0, 0, 1, 1, hSrcDC, location.X, location.Y, (int)CopyPixelOperation.SourceCopy);
                gdest.ReleaseHdc();
                gsrc.ReleaseHdc();
            }

            // Return the captured pixel color
            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)
        {
            DoAction();
            return;
        }

        Thread.Sleep();
    }
}
ログイン後にコピー

結論:

このアプローチにより、正確な画面ピクセルの色の検出が可能になり、色に基づいた信頼性の高いイベント トリガーが可能になります。

以上が画面ピクセルの色の変化を検出してイベントをトリガーするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート