Détermination de la couleur des pixels sur un moniteur : un guide complet
Pour détecter efficacement une couleur spécifique sur un pixel de l'écran et déclencher une action ultérieure, il est impératif de comprendre les détails techniques impliqués. Cet article présente une approche très efficace pour accomplir cette tâche.
Premiers pas avec RVB
Le modèle de couleur RVB attribue des valeurs aux composants rouge, vert et bleu pour définir une couleur spécifique. Chaque composant va de 0 à 255, permettant un large spectre de teintes.
Capturer la couleur des pixels
L'étape cruciale de ce processus consiste à capturer la couleur d'un élément choisi. pixel sur votre moniteur. Ceci peut être réalisé en utilisant la fonction GetColorAt() présentée ci-dessous :
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); }
Cette fonction capture efficacement la couleur du pixel spécifié en créant un bitmap temporaire et en exécutant un transfert de blocs de bits. .
Interrogation de pixels en temps réel
Une fois que vous avez la possibilité de capturer couleur du pixel, vous pouvez implémenter une boucle qui vérifie en permanence la couleur d'un pixel spécifique :
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(); } }
Cette boucle récupérera en continu la couleur du pixel spécifié et la comparera à une couleur cible. Lors d'un match, cela déclenchera l'action prévue. Pour un contrôle plus précis, vous pouvez envelopper cette boucle dans un thread séparé ou l'utiliser dans une application console.
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!