颜色点击器不准确
本文关键字:不准确 颜色 | 更新日期: 2023-09-27 17:49:21
我正试图编写一个程序,点击它找到的第一个像素,它有一定的颜色。不幸的是,有时我的程序似乎无法检测到屏幕上实际存在的颜色。我正在截图屏幕,然后使用GetPixel()方法来找到每个像素的颜色。
这是我使用的方法:
private static Point FindFirstColor(Color color)
{
int searchValue = color.ToArgb();
Point location = Point.Empty;
using (Bitmap bmp = GetScreenShot())
{
for (int x = 0; x < bmp.Width; x++)
{
for (int y = 0; y < bmp.Height; y++)
{
if (searchValue.Equals(bmp.GetPixel(x, y).ToArgb()))
{
location = new Point(x, y);
}
}
}
}
return location;
}
为了截取我的屏幕截图,我使用:
private static Bitmap GetScreenShot()
{
Bitmap result = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);
{
using (Graphics gfx = Graphics.FromImage(result))
{
gfx.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
}
}
return result;
}
即使我使用的颜色我知道是在屏幕上,它仍然返回Point.Empty。这是什么原因呢?
只是复制了你的方法,并将其用作查找Color.Black
的颜色,它没有任何问题。
当前代码中唯一可能不正确的地方是,在找到第一个匹配点后,您没有立即返回。相反,您只需继续遍历所有点,从而导致您将返回最后一次出现的匹配颜色。
为了避免这种情况,你可以将你的代码修改为:private static Point FindFirstColor(Color color)
{
int searchValue = color.ToArgb();
using (Bitmap bmp = GetScreenShot())
{
for (int x = 0; x < bmp.Width; x++)
{
for (int y = 0; y < bmp.Height; y++)
{
if (searchValue.Equals(bmp.GetPixel(x, y).ToArgb()))
{
return new Point(x, y);
}
}
}
}
return Point.Empty;
}