Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengesan Perubahan Warna Piksel Skrin dan Peristiwa Pencetus?

Bagaimanakah Saya Boleh Mengesan Perubahan Warna Piksel Skrin dan Peristiwa Pencetus?

Linda Hamilton
Lepaskan: 2024-12-31 03:38:10
asal
500 orang telah melayarinya

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

Membaca Warna Piksel Skrin untuk Pencetusan Acara

Pernyataan Masalah:

Menentukan kaedah untuk menangkap warna sesuatu piksel skrin dan mencetuskan peristiwa berdasarkan yang dikesan warna.

Penyelesaian:

Teknik paling cekap melibatkan penangkapan piksel di lokasi kursor, memastikan keserasian merentas berbilang monitor.

Pelaksanaan Terperinci:

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);
        }
    }
}
Salin selepas log masuk

Tinjauan untuk Perubahan Warna Piksel:

Untuk terus memantau warna piksel tertentu, anda boleh menggunakan fungsi berikut dalam gelung atau benang:

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();
    }
}
Salin selepas log masuk

Kesimpulan:

Pendekatan ini membolehkan pengesanan warna piksel skrin yang tepat dan membolehkan pencetus peristiwa yang boleh dipercayai berdasarkan warna.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan Perubahan Warna Piksel Skrin dan Peristiwa Pencetus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan