FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Buscar imagen en el escritorio u otra imagen mayor
Buenas, señores, vuelvo a estar por aquí.
Ante todo les diré que trabajo con Delphi 10 bajo Windows Vista. Tengo un bitmap con una imagen (bmp) de 120 pixels x 50 pixels (aprox) y necesito buscar si se encuentra en el escritorio. Para ello lo que yo sé hacer es capturar el escritorio en un bitmap (con BitBlt, no sé si hay otra forma mejor) y después recorrer todo el bitmap del escritorio buscando el bitmap de la imagen buscada (pixel por pixel). Ya sé lo que pensarán, es una burrada, funciona pero puedes ir a cenar con los amigos y al regresar posiblemente el procedimiento haya encontrado la imagen y devuelto su posición (TPoint apuntando a Lef y Top en pantalla) Es evidente que así no puedo continuar y estoy convencido que a nivel de tarjeta gráfica debe haber algún método que haga esto en un plis, al igual que hace la captura del escritorio, pero no tengo ni idea. ?Alguien puede ayudarme? Gracias por vuestra colaboración. |
#2
|
||||
|
||||
No tengo idea de manejo de imágenes, pero aquí va una idea para acelerar el tema:
Yo tomaría el primer pixel de la imagen (1,1). Luego recorrería la imagen de la captura de pantalla pixel a pixel. Si el pixel es igual al que busco compararía el resto de pixeles con la imagen que tengo. Esto te ahorrará la comparación de todos los pixeles que no tienen el color original. Como paso intermedio, antes de comparar la imagen completa, podrías comparar las otras tres puntas (píxeles (120,1) (1,50) y (120,50)) y si son iguales continuar a comparar la imagen completa. También dejaría de comparar 120pixeles antes de llegar al final derecho y 50 pixeles antes de llegar al fondo, pues la imagen no cabrá en la pantalla. Creo que es obvio, pero también dejaría de comparar si he encontrado la imagen, a menos que exista la posibilidad de que haya más de una. Si muestras la parte de código que compara una imagen con la de la captura de pantalla, quizás alguien pueda ayudarte a optimizarla. |
#3
|
|||
|
|||
Gracias por tu colaboración duilioisola.
En realidad ya hago lo que tu dices, es decir si el primer pixel no coincide ya no sigo y cambio al siguiente punto de pantalla y también elimino la parte derecha e inferior donde no puede estar, pero todos los comentarios de mi primer escrito ya contaban con estas características en el código y tarda el miserere. Tal como me sugieres adjunto el código:
Lo del monitor es porque trabajo con 2. Saludos. |
#4
|
||||
|
||||
Aquí explican como comparar dos imágenes:
Mediante Scanline
|
#5
|
||||
|
||||
Quizás esto te de una idea: resta de imágenes, si la imagen resultante es negra, son iguales.
Saludos. |
#6
|
|||
|
|||
Gracias a todos, pero por el momento dimito de este empeño, no es imprescindible para mi aplicación y ya he invertido demasiado tiempo en ello sin conseguir algo aceptable (desde el punto de vista de rapidez)
MIL GRACIAS. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Zoom de una imagen en otra imagen | Juliajuli | Gráficos | 1 | 02-09-2013 18:17:35 |
Buscar posición de una imagen en pantalla | ZayDun | Varios | 7 | 26-06-2013 22:20:43 |
Comparar imagen en pantalla con otra imagen | gorgori | Gráficos | 4 | 24-12-2010 13:17:22 |
Buscar imagen | franfl | C++ Builder | 2 | 29-03-2008 14:28:44 |
Ver imagen en un DBImage en tamaño mayor | pablorc | Gráficos | 2 | 23-01-2006 16:16:21 |
|