Página 1 de 1

Preguntas acerca del pixelsearch

Publicado: 21 Jun 2009, 11:40
por adrigalilea
buenas de nuevo,, :smt006 le voy cogiendo el gustillo a esto del autoit y bueno cada vez me como mas el tarro y vengo con alguna duda que no resolvi ^^ acerca de la funcion pixelsearch

1ª pregunta,, como defino exactamente el cuadrado??cojo las coordenadas de la esquina superior izquierda y luego las de la inferior izquierda o como??(eso he hecho y mas o menos va bien,,)

2ªpara que sirve el step no lo entiendo muy bien,, :S

3º estoy empleandolo para reconocer los puntos del mapa de un juego el problema es que si le digo que busque un pixel amarillo de un cuadradito que apenas tendra 5x5 pixels me busca solo un pixel y al parecer aunque a simple vista no se vean en el fondo del mapa ay pixels infimos del mismo color y no puedo distinguirlos con la funcion,,
como consigo que ignore esos pixels?

Código: Seleccionar todo

$varf = 0xFFD74C



If PixelSearch(676,32,802,160,$varf,) then

az tal cosa,,

endif
otra dudiya de la cual me acuerdo ahora tabn,,como le digo x ejemplo ahora vuelve a la linea 18¿? (e buscado goto e buscado go to label go to line y no sale nada en help de ese estilo,,) :smt003
x ejemplo aqui si uviera sabido decirle vuelve a la linea tal me ahorraria alguna cosa(y pensar xD aunque de hecho es lo mas divertido pero aveces t saturas,,)

Código: Seleccionar todo


        $vara = 0

        $varb = 0

        $varc = 0

        $vard = 0

        $vare = 0

        $varh = 0



For $i = 1 To 5

        $varz = Random(1,5,1)



            While $varz = 1

                If $vara = 1 Then

                    $i = $i -1

                    ExitLoop

                EndIf

                If $vara = 0 Then

                    $vara = 1

                    Send("222222")

                    $varh = $varh + 1

                EndIf

            WEnd



            While $varz = 2

                If $varb = 1 Then

                    $i = $i -1

                    ExitLoop

                EndIf

                If $varb = 0 Then

                    $varb = 1

                    Send("zzz")

                    $varh = $varh + 1

                EndIf

            WEnd



            While $varz = 3

                If $varc = 1 Then

                    $i = $i -1

                    ExitLoop

                EndIf

                If $varc = 0 Then

                    $varc = 1

                    Send("{F1}")

                    $varh = $varh + 1

                EndIf

            WEnd



            While $varz = 4

                If $vard = 1 Then

                    $i = $i -1

                    ExitLoop

                EndIf

                If $vard = 0 Then

                    $vard = 1

                    Send("{F2}")

                    $varh = $varh + 1

                EndIf

            WEnd

            

            While $varz = 5

                If $vare = 1 Then

                    $i = $i -1

                    ExitLoop

                EndIf

                If $vare = 0 Then

                    $vare = 1

                    Send("{F3}")

                    $varh = $varh + 1

                EndIf

            WEnd

            If $varh = 5 Then

                ExitLoop

            EndIf

        Next
GRACIAS!!

Re: Preguntas acerca del pixelsearch

Publicado: 22 Jun 2009, 03:37
por Chefito
Te pongo la traducción de esta función y sus parámetros, a ver si así te aclaras más :smt001
PixelSearch
--------------------------------------------------------------------------------

Busca en una área específica de pixeles un pixel.


PixelSearch ( izquierda, superior, derecha, inferior, color [, variación-de-sombre] [, paso]] )




Parámetros

izquierda: Coordenada izquierda del rectángulo.
superior: Coordenada superior del rectángulo.
derecha: Coordenada derecha del rectángulo.
inferior: Coordenada inferior del rectángulo.
color: Valor decimal del color de pixel a buscar.
variación-de-sombra (Opcional): Un número entre 0 y 255 para indicar el número permitidi de sombras de variación de los componentes rojo, verde, y azul de el color. Por defecto es 0 (igual).
paso (Opcional): En vez de buscar cada pixel usar un valor mayor que 1 para saltar pixeles (para velocidad). Ejem. Un valor de 2 sólo revisará cada dos pixeles. Por defecto es 1.



Valor devuelto

Al completar: Devuelve un arreglo de dos-elementos de las coordenadas del pixel. (Array[0] = x, Array[1] = y)
Al fallar: Devuelve 1 y fija @error a 1 si el color no se encontró.
Para definir el rectángulo en la pantalla, lo que se hace es definir los cuatro lados de éste, y donde se corten, forman el rectangulo. Aunque a mi siempre me ha gustado más decir que se define la esquina superior izquierda y la esquina inferior derecha del rectangulo. Sabiendo esto se puede formar el rectángulo perfectamente :smt004 .
Respecto al parámetro step, pues es lo que dice la ayuda, que si en vez de buscar en todos los pixeles del rectángulo definido, quieres buscar por ejemplo 1 pixel sí y otro no pues se pondría step=2. Esto se hace para dar velocidad a la búsqueda.
adrigalilea escribió:3º estoy empleandolo para reconocer los puntos del mapa de un juego el problema es que si le digo que busque un pixel amarillo de un cuadradito que apenas tendra 5x5 pixels me busca solo un pixel y al parecer aunque a simple vista no se vean en el fondo del mapa ay pixels infimos del mismo color y no puedo distinguirlos con la funcion,,
como consigo que ignore esos pixels?
Pixels infimos??? Que yo sepa la unidad más pequeña en la resolución de pantalla es el pixel, y no puede haber algo más pequeño. Vamos, que si hay un pixel, la función lo tiene que encontrar.
adrigalilea escribió:como le digo x ejemplo ahora vuelve a la linea 18¿? (e buscado goto e buscado go to label go to line y no sale nada en help de ese estilo
Comandos como Goto, Gosub, etc no existen. Esos comandos son muy habituales en programación basic y vb (programación spagetti).
Para repetir códigos, utiliza funciones y llamalas cuando quieras (programación estructurada).

Saludos.

Re: Preguntas acerca del pixelsearch

Publicado: 22 Jun 2009, 11:17
por adrigalilea
ajajaj ya se que el pixel es la unidad mas pequeña(pero es infimo o no??xDDD),no lo decia por nada en particular me referia a que se que lo reconoce pero a mi no me da a simple vista para reconocer ese color en un pixel,,(vamos para recalcar,,)
lo demas ahora lo reviso,,
umm y eso de hacer funciones no se mu bienn hacerlo en autoit pero ya le metere algun ratillo,,
____________________________________________
bueno haber ahora estoy intentando que detecte los cuadrados de color morado en el paint de momento llevo esto ahora intento exponerlo un poco

Código: Seleccionar todo

WinActivate("Dibujo - Paint","")

sleep(1000)



$varmorado = 0xCAA4CA

while 1

    $coord = PixelSearch( 59, 93, 1423, 833, $varmorado)

If Not @error Then

    If $varmorado = PixelGetColor($coord[0]+1,$coord[1]) Or $varmorado = PixelGetColor($coord[0]-1,$coord[1]) Or $varmorado = PixelGetColor($coord[0],$coord[1]+1) Or $varmorado = PixelGetColor($coord[0],$coord[1]-1) Then

        MsgBox(0, "X and Y are:", $coord[0] & "," & $coord[1])

    EndIf

EndIf

WEnd
la idea es que si dibujo varios pixels morados en el paint,, y algun cuadrado,, primero detecta un pixel morado y si a su vez tiene un pixel adyacente del mismo color sabre que no es un pixel a secas,,
el problema es que algo no estoy haciendo bien

Re: Preguntas acerca del pixelsearch

Publicado: 23 Jun 2009, 03:49
por Chefito
Mmmmmm......la función PixelSearch no creo que sea adecuada para hacer el script que quieres, ya que ésta se para con la primera coincidencia de un pixel del color que le digas.
Yo pienso que lo que tu quieres es recorrer toda una zona y averiguar que pixel de un color determinado está solo o adyacente a otro igual. Eso es un poco más laborioso :smt024 .
Te pongo un ejemplo de como podría ser:

Código: Seleccionar todo

WinActivate("Dibujo - Paint","")

sleep(1000)

$conjunto=False

$left=59

$rigth=1423

$top=93

$bottom=833

$color = 0xCAA4CA   ;202,164,202

For $Xrectangulo=$left To $rigth

    For $Yrectangulo=$top To $bottom

        If $color = PixelGetColor($Xrectangulo,$Yrectangulo) Then

            For $Xpixel=-1 to 1

                For $Ypixel =-1 To 1

                        If ($Xpixel<>0 Or $Ypixel<>0) And $color = PixelGetColor($Xrectangulo+$Xpixel,$Yrectangulo+$Ypixel) Then

                            $conjunto=True

                            ExitLoop

                        EndIf

                    Next

                If $conjunto Then ExitLoop

            Next

            If $conjunto Then

                ConsoleWrite("Punto adyacente. Las coordenadas x e y son: " & $Xrectangulo+$Xpixel & "," & $Yrectangulo+$Ypixel & @CR)

                $conjunto=False

            Else

                ConsoleWrite("Punto único. Las coordenadas x e y son: " & $Xrectangulo+$Xpixel & "," & $Yrectangulo+$Ypixel & @CR)

            EndIf

        EndIf

    Next    

Next

 
Este código recorre toda la zona y te pone en la consola de mensajes del scite que puntos del paint son del color especificado (el lila eso que has puesto :smt003 ).
Si solamente te interesa saber cuales están adyacentes a otros, modificando minimamente el código (quitando el else) lo dejas así. En este caso, también puedes darle velocidad a la busqueda saltandote puntos en los for...next (step 2). Tardaría la mitad de tiempo, y no se dejaría ningún punto que esté adyacente a otro, ya que si hay dos puntos juntos, si se salta el 1º, analizará el 2º haciendo un step 2.
Si quieres saber solamente la primera coincidencia del primer punto adyacente, mete una condición que haga que se salga de todos los fors, o algo así :smt004 .

Saludos.

Re: Preguntas acerca del pixelsearch

Publicado: 23 Jun 2009, 16:05
por adrigalilea
:smt038 como controlas maxo!!!Oo