> 백엔드 개발 > C++ > 화면 픽셀 색상 변경 및 트리거 이벤트를 어떻게 감지할 수 있습니까?

화면 픽셀 색상 변경 및 트리거 이벤트를 어떻게 감지할 수 있습니까?

Linda Hamilton
풀어 주다: 2024-12-31 03:38:10
원래의
501명이 탐색했습니다.

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

이벤트 트리거를 위한 화면 픽셀 색상 읽기

문제 설명:

특정 픽셀의 색상을 캡처하는 방법 결정 화면 픽셀을 감지하고 감지된 정보를 기반으로 이벤트를 트리거합니다. color.

해결책:

가장 효율적인 기술은 커서 위치의 픽셀을 캡처하여 여러 모니터 간의 호환성을 보장하는 것입니다.

세부 구현:

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);
        }
    }
}
로그인 후 복사

폴링 픽셀 색상 변경:

특정 픽셀 색상을 지속적으로 모니터링하려면 루프 또는 스레드 내에서 다음 기능을 활용할 수 있습니다.

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();
    }
}
로그인 후 복사

결론:

이 접근 방식을 사용하면 정확한 화면 픽셀 색상 감지가 가능하고 색상을 기반으로 안정적인 이벤트 트리거가 가능합니다.

위 내용은 화면 픽셀 색상 변경 및 트리거 이벤트를 어떻게 감지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿