Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Comparar 2 TImage (https://www.clubdelphi.com/foros/showthread.php?t=38698)

TomMB 24-12-2006 05:06:08

Comparar 2 TImage
 
hola aguien podria decirme como comparar 2 imagenes, yo pense que seria algo asi

if Image1.Picture.Bitmap=Image2.Picture.Bitmap then......
o asi
if Image1.Canvas=Image2.Canvas then......

Pero no me funciona.

Gracias.

Lepe 24-12-2006 08:44:42

Como bien dices no es tan simple.

Busca en el foro por "scanline" que permite extraer una línea entera de un Timage para después compararlo con el otro. Es un sistema quizás lento para imágenes grandes.

Creo haber visto que para cosas más gordas puede usarse "CompareMem"

Busca por el foro y también abajo del todo en hilos relacionados quizás te dé más ideas.

Saludos

seoane 24-12-2006 12:59:26

Sabia que había puesto un código como el que tu pides por aquí:
http://www.clubdelphi.com/foros/show...92&postcount=8

Y si necesitas algo mas avanzado, en este otro hilo identifico el recuadro donde se producen las diferencias:
http://www.clubdelphi.com/foros/show...60&postcount=4

fide 24-12-2006 14:24:39

Respondiendo
 
Hola, tambien podrias hacerlo conparando los pixeles de forma independiente en cada una de las imagenes. Eso sería algo lento pero funcionaría.

Ademas, para algo Microsoft inplmemento los Thread. Si utilizar barios de estos con un ScanLine quizá logres algo un tanto optimizado.

Si no sabes lo que es un Thread o como utilizarlos pregunta en el foro a los demas por ellos y leete un buen manual de delphi.

PiornoCKA&G 24-12-2006 14:24:58

Via lenta pero sencilla
 
Prueba si esto te sirve:
Código Delphi [-]
...
// Importante: Una imagen es una matrix bidimensional de colores 
//Si la escala entre las dos imagen son diferentes ya no son iguales
if  (Image1.Picture.Bitmap.Width = Image2.Picture.Bitmap.Width)  and
   (Image1.Picture.Bitmap.Height = Image2.Picture.Bitmap.Height) then
for i := 1 to Image1.Picture.Bitmap.Width do
    begin
        for j := 1 to  Image1.Picture.Bitmap.Height do
            begin
                //Si un solo pixel es diferente entonces no son iguales
                if Image1.Picture.Bitmap.Canvas.Pixels[i,j] := 
                   Image2.Picture.Bitmap.Canvas.Pixels[i,j]  then 
                   Iguales := False; //Variable boolean predefinida
              end; 
    end;
//Y ahi lo tienes:cool:

TomMB 24-12-2006 21:14:49

Voy a probarlo
 
Gracias a todos por vuetra rapidez en contestar, voy a probarlo todo a ver cual de las soluciones me funciona mejor, ya os dire cosas.

reitero mi agradecimiento, no esperaba tantas respuestas en tan poco tiempo, SOYS COJONUDOS.

PD. Felices fiestas a todos.


La franja horaria es GMT +2. Ahora son las 07:57:54.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi