Énoncé du problème :
Détermination d'une méthode de capture de la couleur d'un élément spécifique pixel de l'écran et déclencher un événement en fonction du pixel détecté couleur.
Solution :
La technique la plus efficace consiste à capturer le pixel à l'emplacement du curseur, garantissant ainsi la compatibilité sur plusieurs moniteurs.
Implémentation détaillée :
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); } } }
Interrogation pour la couleur des pixels Modification :
Pour surveiller en permanence une couleur de pixel spécifique, vous pouvez utiliser la fonction suivante dans une boucle ou un fil :
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(); } }
Conclusion :
Cette approche permet une détection précise de la couleur des pixels de l'écran et permet un déclenchement d'événements fiable en fonction de la couleur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!