2011-04-28 5 views
6

당신이 내게 화면에서 이미지를 찾는 방법에 대한 힌트를 줄 수 있습니까? 간단한 픽셀 조합입니다. 예를 들어, 30x30 픽셀의 흰색 사각형 좌표를 찾습니다.자바 화면에 이미지를 찾으십시오

Java 로봇 클래스를 사용하면 특정 픽셀의 색상을 찾을 수 있습니다. 하지만 반대편에 있어야합니다. 내 프로그램이 내 화면을 스캔 한 다음이 작은 이미지의 좌표를 알려주고 싶습니다. 로봇으로 모든 픽셀을 통과 할 수 있지만 그보다 더 빠를 것입니다. 훨씬 더 빨리.

제안 사항?

답변

4

로봇과 함께 모든 픽셀을 통과 할 수 있지만 그보다 더 빠릅니다. 훨씬 더 빨리.

나는 그것이 정확히 당신이해야 할 일입니다.

모든 픽셀이 흰색이어야하는 경우 먼저 30 픽셀 폭 단계를 취할 수 있으며 흰색 픽셀을 발견하면 5 픽셀 단계를 말한 다음이 픽셀도 흰색 인 경우 사각형의 나머지 픽셀을 검사하십시오 . 이 같은

뭔가 :

.  .  .  .  .  . 



.  ..........  .  .  . 
     ...... 
     . . . . 

     . . . . 
.  .  .  ..........  . 
          .......... 
          .......... 
          .......... 
          .......... 
.  .  .  .......... 
+0

하지만 얼마나 빠를까요? 이드는 게임에서 좋은 점수를 얻기 위해 그것을 사용하고 싶지만 .. 모든 것들을 통과하는 것은 영원히 성공하지 못합니까? – Jaanus

+1

사용해보기. 나는 한 번 테트리스 봇을 위해 그것을했습니다 ... 테트리스 필드를 스캔하는 것이 당신의 상황보다 약간 더 쉬울지라도 잘 작동했습니다. – aioobe

+1

얼마나 영리한가에 달려 있습니다. 이진 검색과 같은 일을 할 수있는 방법이있을 수도 있고 다양한 단축키를 사용할 수도 있습니다. 예를 들어 30x30 픽셀의 흰색 사각형을 찾으려면 현재 픽셀이 흰색이 아닌 경우 사각형을 누락시키지 않고 30 픽셀을 건너 뛸 수 있습니다. 그것은 모두 당신이 화면 상에 기대하는 것에 달려 있습니다. – Doug

4

사실, 훨씬 simpliler 이상 신뢰할 수있는 솔루션이 여기에있다. 자바 응용 프로그램 내에 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()); 
    } 
} 

또한 설정을위한 How to use Sikuli inside your Java programs를 참조하십시오.

+0

나는 조금 혼란 스럽다. 당신은 내가 code.google의 사이트에서 다운로드 한 sikuli-standalone.jar에서 찾은 클래스를 사용하고 있으며,이 코드는 code.google ...에 관한 문서를 가지고있다. 그러나 링크는 다른 세트를 가진 다른 sikuli를 참조하는 것 같다. 수업. 두 라이브러리를 모두 다운로드했습니다. 여러분이 사용하는 것은 괜찮습니다. 그러나 HOWTO를 찾기는 어렵습니다. 다른 하나는 더 나은 문서화 (링크를 게시했습니다)하지만 전혀 작동하지 않습니다. 나는 정말로 혼란 스럽다. 두 종류의 시쿨리가 있는가? 고맙습니다. – Marko

+0

기억이 안나지만, Java 프로젝트에서 Sikuli를 설치/설정하기 위해 링크를 공유한다고 생각합니다. 5 단계 전까지 만 관련이있을 것입니다. 샘플 코드를 따르지 않을 것입니다. 아마 code.google.에 대한 문서를 따라야합니다. 정확히 작동하지 않는 것은 무엇입니까? 솔직히 말해서 JRuby에서만 Sikuli를 Java로 직접 사용해 보려고하지 않았습니다. 그러나 JRuby에서 작동하는 경우 Java에서 작동하지 않아야하는 이유는 알 수 없습니다. – Noz

+0

sikuli-standalone ** .jar는 저에게 잘 작동합니다 (code.google에서 다운로드 한 것). 클래스 사용법에 대한 예제도 꽤 있습니다. 이제 모든 것이 좋습니다. 나는 두 종류의 sikuli가 있다면 단지 궁금했다. – Marko

관련 문제