PDA

Ver la Versión Completa : Comparar imagen en pantalla con otra imagen


gorgori
06-12-2010, 19:56:06
Hola comunidad. Tengo en mente hacer un programa que detecte y compare imágenes de la pantalla con alguna otra que tenga en un formulario oculto.

La idea sería que cada X minutos verifique si en una zona de la pantalla se visualiza la imagen que tengo cargada, lo que llamaría a que se ejecute alguna linea de código.

Por ejemplo: Si el caso fuera que el programa tuviera que iniciar automáticamente sesión en el Messenger (no es el caso) cada vez que se ve que está desconectado y, por lo tanto, el botón que dice "Iniciar Sesión",

entonces el programa hecho en Delphi debería detectar el rectángulo donde se encuentra dicho botón y darse cuenta que es igual a una imagen del mismo guardada en un TImage (para compararla).




Se agradece la lectura y la ayuda! Hasta luego

Ñuño Martínez
07-12-2010, 11:51:01
Creo que no te va a funcionar. Es decir, sí se pueden comparar imágenes, pero si lo que quieres hacer es conectarte automáticamente al Messenger de Microsoft no es esta la mejor forma. Lo mejor es que busques si es posible entablar una conversación con el cliente (MSN Live), o incluso podría interesarte usar la biblioteca de conexión de Pidgin (http://www.pidgin.im/).

gorgori
07-12-2010, 18:03:40
Lo dije como ejemplo lo del MSN, no es lo que quiero hacer.

Quería saber si es posible hacer algo asi como una matriz de pixeles de un rectangulo "imaginario" en pantalla. Asi, compraria los pixeles con otra imagen y podria calcular si es igual o no.

Gracias por la respuesta :)

gorgori
12-12-2010, 09:05:30
Ahí lo hice, es una cosa de niños al final...

procedure TForm1.Button1Click(Sender: TObject);
var
e,I: Integer;
begin
igual := 0;
distinto := 0;
for I := 0 to Image1.Width-1 do
begin
for E := 0 to Image1.Height - 1 do
begin
if Image1.Picture.Bitmap.Canvas.Pixels[e,i] = Image2.Picture.Bitmap.Canvas.Pixels[e,i] then
igual := igual +1
else
distinto := distinto+1;
end;
end;
labelededit1.Text := IntToStr(igual);
labelededit2.Text := IntToStr(distinto);
end;

De ahí sale cuantos son iguales y cuantos no. Gracias!

manuc
24-12-2010, 13:17:22
Hola,

También le puedes calcular el hash a las imágenes originales y a las imágenes con las que quieres compararlas. Si son iguales, es la misma imagen.

Un saludo.