我目前有一個代碼,它將在該程序截圖中搜索位圖,但是,位圖在截圖中存在三次,我希望它在第二次找到它時單擊。位圖檢測
有沒有辦法做到這一點?提前很多感謝的......
代碼:
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