Hola a todos,
se os ocurre alguna manera rapida para comparar dos graficos(JPG,BMP, da igual), y detectar diferencias de un a otro.
Hola a todos,
se os ocurre alguna manera rapida para comparar dos graficos(JPG,BMP, da igual), y detectar diferencias de un a otro.
Biel,
Si los gr谩ficos estan en formatos diferentes, la soluci贸n ser铆a seleccionar cada uno en un hDC distinto y comparar pixel a pixel sus colores
Si lo que deseas es s贸lo comparar dos ficheros con igual extension, podr铆as calcular el CRC de cada uno de ellos y comparar los CRCs.
Hola Antonio,
los graficos son con el mismo formato, lo del CRC lo habia estado pensando como una posibilidad, pero quizas sea mas interesante el comparar pixel a pixel, pues as铆 podria tener un porcentaje de smilitud y no solo igual o diferente.
Estoy algo perdido con el tema, como podria hacer una lectura pixel a pixel, comparando el color.
local hBmp1 := ReadBitmap( 0, cBmpFile1 )
local hBmp2 := ReadBitmap( 0, cBmpFile2 )
local hDC := CreateDC( "DISPLAY",0,0,0 )
local hDCMem1 := CreateCompatibleDC( hDC )
local hDCMem2 := CreateCompatibleDC( hDC )
local hOldBmp1 := SelectObject( hDCMem1, hBmp1 )
local hOldBmp2 := SelectObject( hDCMem2, hBmp2 )
local nWBmp1 := nBmpWidth( hBmp1 )
local nHBmp1 := nBmpHeight( hBmp1 )
local nWBmp2 := nBmpWidth( hBmp2 )
local nHBmp2 := nBmpHeight( hBmp2 )
DeleteDC( hDC )
// Aqui comparas los pixeles
for n = 1 to nHBmp1
for m = 1 to nHBmp1
if GetPixel( hDCMem1, n, m ) != GetPixel( hDCMem2, n, m )
MsgInfo( "son distintos" )
endif
next
next
SelectObject( hDCMem1, hOldBmp1 )
DeleteDC( hDCMem1 )
SelectObject( hDCMem2, hOldBmp2 )
DeleteDC( hDCMem2 )Perfecto, gracias Antonio.
Es justo lo que necesitaba, un pelin lento para lo que lo quiero, pero intentare pasarla a C , o no evaluar todos los pixels. Realmente busco similitud, y no es critico pixel arriba pixel abajo.
Muchas gracias.
Hi.
If you need to compare two JPG files, try this:
if HB_MD5File(cFile1) == HB_MD5File(cFile2)
? "equal"
endif
Toninho.
Hi Toninho, thanks for your help. HB_MD5File() will be helpfull to find diferences between files.
But I will use pixel by pixel compare, because I want to know not just equal, also want to know similar.
Gracias Antonio, con un peque帽o retoque ya tengo la funci贸n haciendo justo lo que queria.
La utilizo con una camara IP, y lo que hago es detecar movimiento en la camara para disparar el sistema de grabaci贸n.
Le he a帽adido dos parametros, precision (pixels a evaluar), y similitud (para detectar diferencias entre colores). La funcion retorna el porcentaje de diferencia entre las dos imagenes.
Gracias por la ayuda.
Biel,
Me alegro que te haya servido ![]()
Hola Antonio,
en el ejemplo de codigo que has puesto, para que sirven las variables hOldBmb1, y hOldBmp2. Estoy intentando pasar la funcion a c, y estas variables parece que no las usamos, o no alcanzo a ver en que se usan.
Gracias anticipadas.
Hola Biel,
Interesante el tema, usar una web cam para vigilancia y otras cosillas mas,,, pregunto, si por compraracion de imagenes, se activa el modo grabacion video, como se cancela la grabacion??, es decir en forma automatica?
Salu2

Biel,
Siempre que se usa SelectObject() hay que guardar el valor que devuelve que es el objeto GDI previamente seleccionado, para restaurarlo como estaba, al final
Antonio,
gracias maestro. No me habia percatado de las ultimas lineas de la funci贸n. Tendre que estudiarme mas profundamente el funcionamiento de GDI.
Biel,
Enhorabuena por tu aplicaci贸n de captura de im谩genes, est谩 espectacular ![]()