Maison > développement back-end > C++ > Comment puis-je détecter les changements de couleur des pixels de l'écran et les événements déclencheurs ?

Comment puis-je détecter les changements de couleur des pixels de l'écran et les événements déclencheurs ?

Linda Hamilton
Libérer: 2024-12-31 03:38:10
original
501 Les gens l'ont consulté

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

Lecture de la couleur des pixels de l'écran pour le déclenchement d'événements

É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);
        }
    }
}
Copier après la connexion

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();
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal