你們可以給我一些關於如何在屏幕上找到圖像的提示。我的意思是,一個簡單的像素組合。例如,它找到30x30像素白色方塊的座標。Java在屏幕上找到圖像
Java機器人類允許我找到某個像素的顏色。但是我需要與之相反,我希望我的程序能夠掃描我的屏幕,然後告訴我這個小圖像的座標。那麼我可以通過所有的像素與機器人,但它應該比這更快。快多了。
有什麼建議嗎?
你們可以給我一些關於如何在屏幕上找到圖像的提示。我的意思是,一個簡單的像素組合。例如,它找到30x30像素白色方塊的座標。Java在屏幕上找到圖像
Java機器人類允許我找到某個像素的顏色。但是我需要與之相反,我希望我的程序能夠掃描我的屏幕,然後告訴我這個小圖像的座標。那麼我可以通過所有的像素與機器人,但它應該比這更快。快多了。
有什麼建議嗎?
那麼我可以通過與機器人的所有像素,但它應該比這更快。快多了。
恐怕這正是你必須要做的。
如果所有像素都應該是白色,則可以先採用30像素寬的步驟,如果您找到白色像素,則採取5像素級,然後如果這些像素也是白色,則檢查方塊中剩餘的像素。
事情是這樣的:
. . . . . .
. .......... . . .
......
. . . .
. . . .
. . . .......... .
..........
..........
..........
..........
. . . ..........
其實,還有一個更simpliler或更可靠的解決方案這一點。您可以在Java應用程序內部實現Sikuli庫,以在屏幕上找到圖像元素並與它們交互。它旨在自動化UI測試,但我認爲它可以很容易地滿足您的需求。
示例應用程序(source):
import java.net.MalformedURLException;
import java.net.URL;
import org.sikuli.api.*;
import org.sikuli.api.robot.Mouse;
import org.sikuli.api.robot.desktop.DesktopMouse;
import org.sikuli.api.visual.Canvas;
import org.sikuli.api.visual.DesktopCanvas;
import static org.sikuli.api.API.*;
public class HelloWorldExample {
public static void main(String[] args) throws MalformedURLException {
// Open the main page of Google Code in the default web browser
browse(new URL("http://code.google.com"));
// Create a screen region object that corresponds to the default monitor in full screen
ScreenRegion s = new DesktopScreenRegion();
// Specify an image as the target to find on the screen
URL imageURL = new URL("http://code.google.com/images/code_logo.gif");
Target imageTarget = new ImageTarget(imageURL);
// Wait for the target to become visible on the screen for at most 5 seconds
// Once the target is visible, it returns a screen region object corresponding
// to the region occupied by this target
ScreenRegion r = s.wait(imageTarget,5000);
// Display "Hello World" next to the found target for 3 seconds
Canvas canvas = new DesktopCanvas();
canvas.addLabel(r, "Hello World").display(3);
// Click the center of the found target
Mouse mouse = new DesktopMouse();
mouse.click(r.getCenter());
}
}
我有點困惑。您正在使用我在sikuli-standalone.jar中找到的類,該類是從code.google的網站下載的,並且有關於code.google的文檔....但是,您發佈的鏈接似乎指的是另一個sikuli,它有不同的類。我下載了這兩個庫。您使用的那個工作正常,但很難找到HOWTO。另一個有更好的文檔(你發佈了鏈接),但它根本不起作用。我真的很困惑,有兩種類型的sikuli,或者是什麼?謝謝。 – Marko 2014-03-19 08:28:48
我不太記得,但我認爲我只在底部共享鏈接,以便安裝/設置Sikuli以用於Java項目。這可能只是在步驟5之前纔有意義,我不會遵循那裏演示的示例代碼。您應該遵循code.google的文檔。什麼不工作?說實話,我還沒有嘗試過直接使用Java的Sikuli,只使用JRuby。但是如果它適用於JRuby,我不明白爲什麼它不適用於Java。 – Noz 2014-03-19 20:04:55
sikuli-standalone **。jar對我來說很好(我從code.google下載的那個),我也發現了很多關於如何使用它的類的例子。所以現在一切都很好。我只是好奇,如果有兩種類型的sikuli。 – Marko 2014-03-20 21:59:52
但它會是多快呢?編號喜歡用它來在遊戲中獲得好分數..但通過所有這些..不是它會永遠處理它嗎? – Jaanus 2011-04-28 20:13:00
試一試。我曾經爲一個俄羅斯方塊機器人做過一次......它工作得很好(即使掃描一個俄羅斯方塊領域似乎比你的情況要容易一些)。 – aioobe 2011-04-28 20:20:00
取決於你可以有多聰明。可能有辦法做一些二進制搜索的形式,或者可能有各種捷徑可供選擇。例如,您想要查找30x30像素的白色正方形,這意味着如果當前像素不是白色,則可以安全地跳過30個像素,而不會冒丟失正方形的風險。這一切都取決於你期望在屏幕上。 – Doug 2011-04-28 20:21:16