Buscar un texto o color en una imagen

Iniciado por demoniox12, 11 Febrero 2008, 18:11 PM

0 Miembros y 1 Visitante están viendo este tema.

demoniox12

Hola, yo lo que kisiera hacer es sakar un screen y luego ver si tiene tal color en algun lugar de la pantalla y que me de las coordenadas... aver si me pueden orientar de como hacerlo...

ej: abro una ventana que contiene el color verde en algun lugar y yo kisiera obtener las coordenadas de el lugar donde se encuentra eso...

salu2!
By Demoniox

Chefito

#1
Pues una forma bastante decente y rápida puede ser esta:
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Private Sub Command1_Click()
Dim Ancho As Integer, alto As Integer
Ancho = ScaleX(Picture1.Width, vbTwips, vbPixels)
alto = ScaleY(Picture1.Height, vbTwips, vbPixels)
For X = 1 To Ancho
    For Y = 1 To alto
        DoEvents
        If GetPixel(Picture1.hdc, X, Y) = 4341823 Then Debug.Print X & "," & Y
    Next
Next
End Sub

Private Sub Form_Load()
Image1.Picture = LoadPicture(path de la imagen)
Picture1.Width = Image1.Width
Picture1.Height = Image1.Height
End Sub

En el loadpicture introduce el path y el nombre de la imagen. Coloca un picturebox, y dentro de éste un objeto image. También pon un boton. El número 4341823 es un color que utilize yo. Pon tu el color tipo long. Puedes ganar aun más velocidad en contra de no revisar todos los pixeles, utilizando step en los for.
Saludos.
P.D. Se me olvido comentarte que tenías que pegar el objeto image que se encuentra dentro del picture, a la parte superior izquierda, para que quede totalmente acoplado.
Moderador del foro oficial de AutoIt en español: www.AutoIt.es.

Todos tenemos inteligencia, lo malo es que algunos no nos acordamos donde la dejamos guardada ;)

demoniox12

muchisimas gracias muy util! una pregunta el color es en rgb?, el color que pusiste vos es un azul no? o un marronsito?

salu2!
By Demoniox

Chefito

Ese color es de tipo long, ya que la api getpixel devuelve el color tipo long. Si te digo la verdad, no se que color es :xD. Lo saqué de una imagen que puse de prueba con esta misma api y unas coordenadas que yo le puse :). Creo que debe ser un gris (supongo....eso miralo tu si te interesa). No es tan dificil pasar de long a rgb. El color que te di de prueba es rgb(63,64,66)=4341823. Como se sabe esto? Bueno, te lo explico por si no lo sabes. Los tres colores que representan el modo rgb (red,green,blue) van desde 0 a 255 (o sea, 256 posibilidades cada uno). Lo único que hay que hacer para pasar uno al otro es dividir o multiplicar:
para pasar (63,64,66) a long: 63+(64*256)+(66*256*256)=4341823
Y al contrario seria dividir (4341823): 4341823/(256*256)=66, resto=16447.
                                                       16447/256=64, resto=63.
Ya tienes los 3 componentes.
Saludos.
Moderador del foro oficial de AutoIt en español: www.AutoIt.es.

Todos tenemos inteligencia, lo malo es que algunos no nos acordamos donde la dejamos guardada ;)