Heim > Backend-Entwicklung > C++ > Wie kann ich Farbveränderungen der Bildschirmpixel erkennen und Ereignisse auslösen?

Wie kann ich Farbveränderungen der Bildschirmpixel erkennen und Ereignisse auslösen?

Linda Hamilton
Freigeben: 2024-12-31 03:38:10
Original
501 Leute haben es durchsucht

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

Lesen der Bildschirmpixelfarbe zur Ereignisauslösung

Problemstellung:

Bestimmen einer Methode zum Erfassen der Farbe eines bestimmten Bildschirmpixel und Auslösen eines Ereignisses basierend auf dem Erkannten Farbe.

Lösung:

Die effizienteste Technik besteht darin, das Pixel an der Cursorposition zu erfassen und so die Kompatibilität auf mehreren Monitoren sicherzustellen.

Detaillierte Implementierung:

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);
        }
    }
}
Nach dem Login kopieren

Abfrage nach Pixelfarbe Änderung:

Um eine bestimmte Pixelfarbe kontinuierlich zu überwachen, können Sie die folgende Funktion innerhalb einer Schleife oder eines Threads nutzen:

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();
    }
}
Nach dem Login kopieren

Fazit:

Dieser Ansatz ermöglicht eine genaue Erkennung der Bildschirmpixelfarbe und ermöglicht eine zuverlässige Ereignisauslösung basierend auf der Farbe.

Das obige ist der detaillierte Inhalt vonWie kann ich Farbveränderungen der Bildschirmpixel erkennen und Ereignisse auslösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage