gpt4 book ai didi

c# - 如何读取屏幕像素的颜色

转载 作者:IT王子 更新时间:2023-10-29 03:58:27 26 4
gpt4 key购买 nike

好的,我正在寻找一个函数或其他东西来读取我显示器上某个像素的颜色,当检测到该颜色时,将启用另一个函数。我想使用 RGB。所有帮助表示赞赏。谢谢。

最佳答案

这是最有效的:它在光标位置抓取一个像素,而不依赖于只有一台显示器。

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Diagnostics;

namespace FormTest
{
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)
{
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 screenPixel.GetPixel(0, 0);
}
}
}

现在,显然,您不必使用光标的当前位置,但这是一般的想法。

编辑:

鉴于上述 GetColorAt 函数,您可以像这样以安全、性能友好的方式轮询屏幕上的某个像素:

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;
}

// By calling Thread.Sleep() without a parameter, we are signaling to the
// operating system that we only want to sleep long enough for other
// applications. As soon as the other apps yield their CPU time, we will
// regain control.
Thread.Sleep()
}
}

如果需要,您可以将其包装在线程中,或者从控制台应用程序中执行它。 “随心所欲,”我想。

关于c# - 如何读取屏幕像素的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1483928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com