2013-10-30 1 views
0

자바에서 픽셀 검색과 관련하여 문제가 있습니다. 현재 나의 클래스/프로그램은 내 목적에 따라 느려지는 픽셀 단위로 픽셀 단위로 검색하고 있습니다. 자바가 픽셀을 훨씬 빨리 검색하지 않아서 사람들에게 물어볼 생각이 들었습니다. 픽셀을 RGB 색상으로 검색하고 있습니다. 하지 명백한 getRGB를 법 (이것이 -Java의 빠른 픽셀 검색

은 아마
final int rot = 0; 
    final int gruen = 0; 
    final int blau = 0; 
    int toleranz = 1; 

    Color pixelFarbe; 

    Dimension bildschirm = Toolkit.getDefaultToolkit().getScreenSize(); 


    Robot roboter = null; 
    try { 
     roboter = new Robot(); 
    } catch (AWTException e) { 
     e.printStackTrace(); 
     OrbitRaider.log("Robot is not working."); 
    } 

    for(int x = 0; x <= bildschirm.getWidth(); x++) 
    { 
     for(int y = 0; y <= bildschirm.getHeight(); y++) 
     { 
      // Pixelfarbe bekommen 
      pixelFarbe = roboter.getPixelColor(x, y); 

      // Wenn Pixelfarbe gleich unserer Farbe 
      if((pixelFarbe.getRed() < (rot - toleranz)) || (pixelFarbe.getRed() > (rot + toleranz)) 
       && (pixelFarbe.getGreen() < (gruen - toleranz)) || (pixelFarbe.getGreen() > (gruen + toleranz)) 
       && (pixelFarbe.getBlue() < (blau - toleranz)) || (pixelFarbe.getBlue() > (blau + toleranz))){("Could not find Pixel Color"); 

      } 

      else{ 
       System.out.println("Pixelcolor found at x: " + x + " y: " + y); 
      } 
     } 
    } 
+1

! getPixelColor가 호출 될 때마다 원시 DLL을 호출하면 매우 느린 결과가 발생합니다. 대신 화면의 스냅 샷을 찍고 메모리에 저장된 픽셀을 확인해야합니다. 그게 너에게 문제가된다면. 더 많은 정보를 제공해야합니다. – Chill

+0

@Chill :'java.awt.Robot'입니다. 그리고 그렇습니다. 단일 픽셀을 얻는 것은 확실히 느립니다. – maaartinus

+0

jdk에 픽셀 긁기 기능이 있다는 것을 알지 못했습니다. 나는 다른 언어로 경험 한 것에서 이야기하고 있었다. 아래의 Ibalazscs 대답은 내가하는 것이 맞습니다. 주요 병목 현상은 사용자가 가지고있는 정보를 스캔하는 것이 아니라 초기 픽셀 정보를 실제로 얻는 것입니다. 일괄 처리하면 훨씬 빠릅니다. – Chill

답변

2

훨씬 빨리 로봇 클래스의 createScreenCapture 방법으로 화면 캡처를 만든 다음이 BufferedImage의 픽셀을 검사하는 것입니다 : 이것은 내 소스 코드입니다 또한 각 호출에서 발생하는 색상 공간 변환으로 인해 속도가 매우 느려지지만) BufferedImage 뒤에있는 int 배열을 통과합니다.

이를 참조하십시오 : 당신은 당신의 getPixelColor 기능이 매우 중요하다, 어떻게 작동하는지에 노출되지 않은 Java - get pixel array from image