elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 08:55  


Tema destacado: ¡Aprende hacking con práctica! - WarZone, el wargame de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo, raul338)
| | |-+  Píxeles y Bucle For
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Píxeles y Bucle For  (Leído 1,172 veces)
calk9

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Píxeles y Bucle For
« en: 18 Septiembre 2011, 20:40 »

Buenas a todos, estoy realizando una aplicacion la cual en un bucle for recorre, moviende el mouse, una determinada área y al encontrar un píxel con determinado color, se frene. EL PROBLEMA es que, al recorrer el área moviendo el cursor con el bucle previamente mencionado anda todo perfecto, con una rapidez considerable, en cambio cuando "coloco" el código para verificar si encuentra el píxel lo hace un 90% más lento. Este es mi código:

Código
Dim iX As Integer
Dim iY As Integer
Dim hdc As Long, pxColor As Double
 
   Call GetCursorPos(Mouse)
   For iX = Mouse.x To Mouse.x + 100
       For iY = Mouse.y To Mouse.y + 75
           Call SetCursorPos(iX, iY)
           'Hasta acá todo bien, lo que viene ahora es lo que lenta muchísimo mi aplicación...
           
           hdc = GetDC(0)
           pxColor = GetPixel(hdc, Mouse.x, Mouse.y)
           ReleaseDC 0, hdc
           Me.Caption = Hex(pxColor)
           If Me.Caption = "AA431B" Then
               Exit For
           End If
           '//
       Next iY
   Next iX

No se cual es el problema, por qué lo hace muchísimo mas lento. Ya que sin verificar el color lo hace en unas milésimas de segundo, y luego con el código para verificar tarda unos 20 o 30 en recorrer el mouse todo el área. Pues ni me imagino cuando haga áreas mas grandes.

Saludos.


« Última modificación: 18 Septiembre 2011, 20:53 por raul338 » En línea
Tenient101

Desconectado Desconectado

Mensajes: 127


Ver Perfil
Re: Píxeles y Bucle For
« Respuesta #1 en: 18 Septiembre 2011, 20:48 »

Te recomendaria que averigues sobre el formato Bitmap ... es mucho mas rapido, salu2 !


En línea
raul338
Moderador
***
Desconectado Desconectado

Mensajes: 2.372


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Píxeles y Bucle For
« Respuesta #2 en: 18 Septiembre 2011, 20:54 »

Exacto, toma un screenshot de la pantalla y de ahi analizalo :P
En línea

calk9

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: Píxeles y Bucle For
« Respuesta #3 en: 18 Septiembre 2011, 20:56 »

Pues es en tiempo real... como podría hacer?
En línea
ignorantev1.1


Desconectado Desconectado

Mensajes: 424


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: Píxeles y Bucle For
« Respuesta #4 en: 18 Septiembre 2011, 21:14 »

Perdon que me meta pero:

Llevo tiempo buscando y no encuentro nada al respecto
¿Hay alguna forma de volcar el contenido de un bitmap(de un contenedor) a un array?

Esa (creo) sería la forma mas rápida de encontrar determinado pixel...

Saludos!
En línea


raul338
Moderador
***
Desconectado Desconectado

Mensajes: 2.372


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Píxeles y Bucle For
« Respuesta #5 en: 18 Septiembre 2011, 21:25 »

Llevo tiempo buscando y no encuentro nada al respecto
¿Hay alguna forma de volcar el contenido de un bitmap(de un contenedor) a un array?

Esa (creo) sería la forma mas rápida de encontrar determinado pixel...
un BMP es un array de por si con un par de bytes mas :P

Aca en un tuto de DirectX para C# explican mas o menos como leer un bmp desde archivo :P: http://www.riemers.net/eng/Tutorials/DirectX/Csharp/Series1/tut10.php
No hace falta saber mucho C# para entenderlo, tiene una buena introduccion :P
En línea

calk9

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: Píxeles y Bucle For
« Respuesta #6 en: 18 Septiembre 2011, 21:26 »

Aver si me pueden ayudar con mi planteo...
En línea
Tenient101

Desconectado Desconectado

Mensajes: 127


Ver Perfil
Re: Píxeles y Bucle For
« Respuesta #7 en: 18 Septiembre 2011, 21:42 »

Perdon que me meta pero:

Llevo tiempo buscando y no encuentro nada al respecto
¿Hay alguna forma de volcar el contenido de un bitmap(de un contenedor) a un array?

Esa (creo) sería la forma mas rápida de encontrar determinado pixel...

Saludos!

Si, es posible http://carlosagreda.blogspot.com/2008/02/destripando-un-bmp-24-bits.html

En línea
ignorantev1.1


Desconectado Desconectado

Mensajes: 424


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: Píxeles y Bucle For
« Respuesta #8 en: 18 Septiembre 2011, 22:14 »

@calk9

¡Tu no te metas!... Hahaha es broma  :xD

Esto te consumirá tiempo valioso siempre:
Citar
Call SetCursorPos(iX, iY)

No entiendo el porqué lo ideal sería colocar el cursor luego de encontrar el pixel que se busca, pero pues sabes lo que haces.

Y todo esto:
Código
           hdc = GetDC(0)
           pxColor = GetPixel(hdc, Mouse.x, Mouse.y)
           ReleaseDC 0, hdc
           Me.Caption = Hex(pxColor)
           If Me.Caption = "AA431B" Then
               Exit For
           End If

 yo lo reduciría a esto:
Código
      Me.Caption = Hex$(point(ix,iy)
     If Me.Caption = "AA431B" Then
         Exit For
     End If

@Raul338, @Tenient101
Pues ambos son buenos tutoriales, pero no me referia a eso precisamente:  :xD

Más bien a cuando la imagen se almacena en un contenedor, por ejemplo hacer unos trazados en un picturebox(lineas, círculos y pintados), todo esto queda almacenado en el campo "image" del contenedor(picturebox o form), ahora volvar el contenido de "image" a un array, creo que la clave está en localizar el punto en memoria donde se almacena "image"... Saludos!
En línea


calk9

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: Píxeles y Bucle For
« Respuesta #9 en: 18 Septiembre 2011, 23:45 »

Pues sigo teniendo el mismo problema. El API SetCursorPos no es el problema, ese bucle lo hace en unas milesimas de segundo. El problema es el ver el color del pixel.
Gracias igual! ;D

Sigo esperando respuestas...

P.D: Te importaría darme tu msn?
En línea
raul338
Moderador
***
Desconectado Desconectado

Mensajes: 2.372


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Píxeles y Bucle For
« Respuesta #10 en: 18 Septiembre 2011, 23:54 »

No entiendo el porqué lo ideal sería colocar el cursor luego de encontrar el pixel que se busca, pero pues sabes lo que haces.
Eso, importa el puntero del mouse? GetDC y ReleaseDC consumen IO :P
En línea

ignorantev1.1


Desconectado Desconectado

Mensajes: 424


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: Píxeles y Bucle For
« Respuesta #11 en: 19 Septiembre 2011, 00:24 »

Citar
P.D: Te importaría darme tu msn?

Si es para mí, mandame tu msn por PM, si no lo es... emmm... el caballo corre por el campo...

Citar
Eso, importa el puntero del mouse? GetDC y ReleaseDC consumen IO :P

Exacto, ¿por qué no colocarlos fuera del bucle?

¿Y de mi plantiamiento ni hablamos verdad?  :xD

Saludos!
En línea


raul338
Moderador
***
Desconectado Desconectado

Mensajes: 2.372


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Píxeles y Bucle For
« Respuesta #12 en: 19 Septiembre 2011, 00:31 »

¿Y de mi plantiamiento ni hablamos verdad?  :xD
Para eso es la misma tecnica, no podemos usar el DC como un mapa de bits :-\ asi que hay que convertirlo a BMP de ahi trabajar libremente :P
En línea

calk9

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: Píxeles y Bucle For
« Respuesta #13 en: 19 Septiembre 2011, 00:46 »

Jaj no me había fijado en eso, ya lo saqué del bucle pero el problema no era eso sino la sentencia if y el ver el color del pixel actual en donde se encuentra el mouse. Yo pense en ponerlo en un timer el código para verificar el color del pixel pero el bucle for es mucho más rapido que 1 milisegundo (que es el menor intervalo de un timer). Pues entonces digo, hago un hook y que al detectar WM_MOUSEMOVE verifique el color del pixel así estaría a la misma velocidad que el bulce... supongo jej. Pero necesito hacer un hook al mouse, no a mi aplicación y de otra ni hablar ya que tendría que inyectar una DLL... y no en basic  :rolleyes:.

Alguna idea?  :P

Saludos.
« Última modificación: 19 Septiembre 2011, 00:48 por calk9 » En línea
raul338
Moderador
***
Desconectado Desconectado

Mensajes: 2.372


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Píxeles y Bucle For
« Respuesta #14 en: 19 Septiembre 2011, 01:09 »

Para hacer un hook al mouse no tienes que inyectar una DLL, solo necesitas una funcion en un modulo :xD
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Imagenes y pixeles
Software
cyberghost 0 300 Último mensaje 4 Marzo 2005, 15:13
por cyberghost
de pixeles a vectores
Diseño Gráfico
kaliyas 5 626 Último mensaje 21 Noviembre 2005, 14:43
por noob_Setup
pixeles
Diseño Gráfico
_loko_ 1 594 Último mensaje 9 Febrero 2006, 07:42
por Sub_Cero
Duda (Parar bucle con dato boolean) [bucle while]
Java
Dem0ny 5 2,947 Último mensaje 17 Diciembre 2008, 17:43
por Dem0ny
ACERCA DE PIXELES
Programación Visual Basic
AsTeroine 2 449 Último mensaje 19 Febrero 2009, 05:40
por AsTeroine
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines