我目前有一个代码,它将在该程序截图中搜索位图,但是,位图在截图中存在三次,我希望它在第二次找到它时单击。位图检测
有没有办法做到这一点?提前很多感谢的......
代码:
private Bitmap Screenshot()
{
Bitmap bmpScreenShot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics g = Graphics.FromImage(bmpScreenShot);
g.CopyFromScreen(0, 0, 0, 0, Screen.PrimaryScreen.Bounds.Size);
return bmpScreenShot;
}
private bool FindBitmap(Bitmap BmpNeedle, Bitmap BmpHaystack, out Point location)
{
for (int outerX = 0; outerX < BmpHaystack.Width - BmpNeedle.Width; outerX++)
{
for (int outerY = 0; outerY < BmpHaystack.Height - BmpNeedle.Height; outerY++)
{
for (int innerX = 0; innerX < BmpNeedle.Width; innerX++)
{
for (int innerY = 0; innerY < BmpNeedle.Height; innerY++)
{
Color cNeedle = BmpNeedle.GetPixel(innerX, innerY);
Color cHaystack = BmpHaystack.GetPixel(innerX + outerX, innerY + outerY);
if (cNeedle.R != cHaystack.R || cNeedle.G != cHaystack.G || cNeedle.B != cHaystack.B)
{
continue;
}
}
}
location = new Point(outerX, outerY);
return true;
}
}
location = Point.Empty;
return false;
}
public void findImage()
{
Bitmap bmpScreenshot = Screenshot();
Point location;
bool success = FindBitmap(Properties.Resources.xxx, bmpScreenshot, out location);
}
不知道是不是真的有帮助,我想要它做的就是点击它找到了第二位。
一位朋友确实建议将我的屏幕截图分割成网格,并做到这一点,为什么要做网格的路要走,还是有可能找到第二个位图?
更新:假设我的屏幕上有5个完全相同的图像。我想让我的程序点击找到的第三个位图。
难道你不想返回可为null的Point'Point?',而不是布尔值,并检查结果是否为null:'Point? p = FindBimap();如果(p.HasValue){}' – abatishchev 2012-04-03 06:02:55
@abatishchev 不是真的我后,是点击它找到了第二位...... '如果(成功==真){ Cursor.Position后=位置; (点击它在屏幕截图中找到的第二个位图) }' 诚实地说,我很满意现在所拥有的。试图让它第二次找到它时点击位图... – Matt 2012-04-03 06:05:43
嗨马特。我通过描述“在屏幕截图中查找位图”遇到问题。位图是文件头描述,屏幕截图是手机中的任何图像,因为我看到哪些图像头已经需要任何文件图像头。如果您想问如何确定用户是否点击了两次或检测到可轻松解决的第二张图片。请解释。在这里你可以下载一个带有图像检测的示例项目:http://www.activevb.de/rubriken/kolumne/kol_30/wp7_einfuehrung.html – Nasenbaer 2012-04-03 06:22:49