c# - 扫描特定区域的像素
问题描述
我想检查某个区域中的像素是否具有某种颜色。目前我只能检查我的屏幕中间。但我意识到我宁愿从屏幕中间扫描一个 10x10 的盒子。
这是我目前实际使用的代码。
Point xy = new Point(Screen.PrimaryScreen.Bounds.Width / 2 + 1, Screen.PrimaryScreen.Bounds.Height / 2 + 1);
Color GetPixel(Point position)
{
using (var bitmap = new Bitmap(1, 1))
{
using (var graphics = Graphics.FromImage(bitmap))
{
graphics.CopyFromScreen(position, new Point(0, 0), new Size(1, 1));
}
return bitmap.GetPixel(0, 0);
}
}
color = GetPixel(xy);
Color purple = Color.FromArgb(255,254,93,255);
if (color.Equals(purple) == true).....
是否可以选择从 10x10 的盒子中扫描紫色并在颜色在此盒子中时返回 true?
解决方案
尝试使用此功能:
private bool ContainsColor(Point StartPosition, int BoxSize, Color ColorToScanFor)
{
using (Bitmap image = new Bitmap(BoxSize, BoxSize))
{
using (Graphics graphics = Graphics.FromImage(image))
{
graphics.CopyFromScreen(StartPosition, Point.Empty, new Size(BoxSize, BoxSize));
for (int X = 0; X < image.Width; X++)
{
for (int Y = 0; Y < image.Height; Y++)
{
if (image.GetPixel(X, Y).ToArgb() == ColorToScanFor.ToArgb())
{
return true;
}
}
}
}
}
return false;
}
当您想调用该函数时,请尝试以下操作:
MessageBox.Show(ContainsColor(new Point(0, 0), 10, Color.Black).ToString());