問題ステートメント:
特定の色をキャプチャする方法の決定画面のピクセルと、検出されたデータに基づいてイベントをトリガーする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 サイトの他の関連記事を参照してください。