문제 설명:
특정 픽셀의 색상을 캡처하는 방법 결정 화면 픽셀을 감지하고 감지된 정보를 기반으로 이벤트를 트리거합니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!