Pregunta sobre Pixelgetcolor y ImageSearch

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
ziknos
Aprendiz de Mago
Mensajes: 50
Registrado: 02 Mar 2009, 17:36

Pregunta sobre Pixelgetcolor y ImageSearch

Mensaje por ziknos »

Hola, estoy realizando un script en el cual necesito que verifique un color mediante pixelgetcolor, pero el problema está que tiene que verificarlo de un "gif" (realmente no se si es un gif) la cuestión es que es como una bola de salud de un juego, la cual está en movimiento y es roja, pero va moviendose por diferentes tonos rojos, necesito hacer un pixelgetcolor ( o algo parecido) pero que detecte diferentes tonalidades, es decir, cuando las tonalidades sean rojas = no hacer nada y cuando las tonalidades sean negras = ejecutar X funcion..

Es posible hacer eso? No consigo encontrar ninguna opción para detectar diferentes tonalidades :S

Otra pregunta, sobre la libreria imagesearch :

Código: Seleccionar todo

#include <ImageSearch.au3>

$xe=0
$ye=0

sleep(3000)

  $result = _ImageSearch("rp.bmp",1 ,$xe, $ye, 0, 0, 1920, 1080, 0)
  
  
      if $result=1 Then
         MouseMove($xe,$ye,3)
         MsgBox(0,"Found","Founded...")
      EndIf

if $result=0 Then
   msgbox(0, "Error", "Not Founded...")
   endif
Eso es para detectar la imagen "rp.bmp" en un juego, pero no me lo detecta de ninguna de las maneras, necesito que la busque por toda la pantalla( del juego) que hago mal? que tengo que añadir/quitar? eso es el script completo que estoy usando para testear imagesearch.

Muchas gracias!!

PD: Les posteo la libreria imagesearch que estoy usando :

Código: Seleccionar todo

#include-once
; ------------------------------------------------------------------------------
;
; AutoIt Version: 3.0
; Language:       English
; Description:    Functions that assist with Image Search
;                 Require that the ImageSearchDLL.dll be loadable
;
; ------------------------------------------------------------------------------

;===============================================================================
;
; Description:      Find the position of an image on the desktop
; Syntax:           _ImageSearchArea, _ImageSearch
; Parameter(s):     
;                   $findImage - the image to locate on the desktop
;                   $tolerance - 0 for no tolerance (0-255). Needed when colors of 
;                                image differ from desktop. e.g GIF
;                   $resultPosition - Set where the returned x,y location of the image is.
;                                     1 for centre of image, 0 for top left of image
;                   $x $y - Return the x and y location of the image
;
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0 
;
; Note: Use _ImageSearch to search the entire desktop, _ImageSearchArea to specify
;       a desktop region to search
;
;===============================================================================
Func _ImageSearch($findImage,$resultPosition,ByRef $x, ByRef $y,$tolerance)
   return _ImageSearchArea($findImage,$resultPosition,0,0,@DesktopWidth,@DesktopHeight,$x,$y,$tolerance)
EndFunc

Func _ImageSearchArea($findImage,$resultPosition,$x1,$y1,$right,$bottom,ByRef $x, ByRef $y, $tolerance)
	;MsgBox(0,"asd","" & $x1 & " " & $y1 & " " & $right & " " & $bottom)
	if $tolerance>0 then $findImage = "*" & $tolerance & " " & $findImage
	$result = DllCall("ImageSearchDLL.dll","str","ImageSearch","int",$x1,"int",$y1,"int",$right,"int",$bottom,"str",$findImage)

	; If error exit
    if $result="0" then return 0
	
	; Otherwise get the x,y location of the match and the size of the image to
	; compute the centre of search
	$array = StringSplit($result[0],"|")
   
   $x=Int(Number($array[2]))
   $y=Int(Number($array[3]))
   if $resultPosition=1 then
      $x=$x + Int(Number($array[4])/2)
      $y=$y + Int(Number($array[5])/2)
   endif
   return 1
EndFunc

;===============================================================================
;
; Description:      Wait for a specified number of seconds for an image to appear
;     
; Syntax:           _WaitForImageSearch, _WaitForImagesSearch
; Parameter(s):     
;					$waitSecs  - seconds to try and find the image
;                   $findImage - the image to locate on the desktop
;                   $tolerance - 0 for no tolerance (0-255). Needed when colors of 
;                                image differ from desktop. e.g GIF
;                   $resultPosition - Set where the returned x,y location of the image is.
;                                     1 for centre of image, 0 for top left of image
;                   $x $y - Return the x and y location of the image
;
; Return Value(s):  On Success - Returns 1
;                   On Failure - Returns 0 
;
;
;===============================================================================
Func _WaitForImageSearch($findImage,$waitSecs,$resultPosition,ByRef $x, ByRef $y,$tolerance)
	$waitSecs = $waitSecs * 1000
	$startTime=TimerInit()
	While TimerDiff($startTime) < $waitSecs
		sleep(100)
		$result=_ImageSearch($findImage,$resultPosition,$x, $y,$tolerance)
		if $result > 0 Then
			return 1
		EndIf
	WEnd
	return 0
EndFunc

;===============================================================================
;
; Description:      Wait for a specified number of seconds for any of a set of
;                   images to appear
;     
; Syntax:           _WaitForImagesSearch
; Parameter(s):     
;					$waitSecs  - seconds to try and find the image
;                   $findImage - the ARRAY of images to locate on the desktop
;                              - ARRAY[0] is set to the number of images to loop through
;								 ARRAY[1] is the first image
;                   $tolerance - 0 for no tolerance (0-255). Needed when colors of 
;                                image differ from desktop. e.g GIF
;                   $resultPosition - Set where the returned x,y location of the image is.
;                                     1 for centre of image, 0 for top left of image
;                   $x $y - Return the x and y location of the image
;
; Return Value(s):  On Success - Returns the index of the successful find
;                   On Failure - Returns 0 
;
;
;===============================================================================
Func _WaitForImagesSearch($findImage,$waitSecs,$resultPosition,ByRef $x, ByRef $y,$tolerance)
	$waitSecs = $waitSecs * 1000
	$startTime=TimerInit()
	While TimerDiff($startTime) < $waitSecs
		for $i = 1 to $findImage[0]
		    sleep(100)
		    $result=_ImageSearch($findImage[$i],$resultPosition,$x, $y,$tolerance)
		    if $result > 0 Then
			    return $i
		    EndIf
		Next	
	WEnd
	return 0
EndFunc

Muchísimas gracias!!!
ziknos
Aprendiz de Mago
Mensajes: 50
Registrado: 02 Mar 2009, 17:36

Re: Pregunta sobre Pixelgetcolor y ImageSearch

Mensaje por ziknos »

Hola, ya he resuelto el primer problema con la función pixelsearch

La segunda aún no he conseguido resolverla

un saludo!
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: Pregunta sobre Pixelgetcolor y ImageSearch

Mensaje por BasicOs »

Te diría que fueras buscando puntos más sencillos de la función para cogerle el truco, como un punto blanco entre un fondo negro, e ir dificultandolo.
Realmente, lo que haces es parte inteligencia artificial, y la base muy rudimentaria para el coche de Google ;)

Salu22:)
Responder