pixeles?????

hector
31 de Enero del 2005
hola amigos tengo el siguiente problema :
Definición Bloque:
Se dispone de dos archivos .BMP que poseen fotos a color casi iguales
lo que se desea es comparar pixel a pixel ambas fotos y entregar
un parámetro de salida que señale en %, la cantidad de pixeles
que son diferentes (cpdif)
Como ejemplo supongamos dos fotos casi iguales en que solo difieren
en que una de ellas, tiene un circulo de cualquier color , entonces
el resultado debiera ser (área circulo / área foto) *100

Entradas : archivo1.bmp y archivo2.bmp
Salida : en variable llamada cparchi con el contenido de
(cpdif)


no tengo idea de como hacerlo pero lo debo hacer urgente por favor orientenme,

gracias de antemano

l_island
31 de Enero del 2005
Crea un proyecto con dos picturebox, Picture1 y Picture2, asigna a cada picture uns de las imágenes, pon un TExtBox (text1) y un CommandButton (command1) pega el siguiente código y ejecuta:

Option Explicit
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Private Sub Command1_Click()
Text1.Text = Format(CompararPictures(Picture1, Picture2), "#.00") & " %"
End Sub
Private Function CompararPictures(pic1 As PictureBox, pic2 As PictureBox) As Double
Dim Px As Long, Py As Long 'Tamaño a comparar
Dim Cx As Long, Cy As Long 'Contador de comparación
Dim nDistintos As Long 'Número de pixeles distintos

Dim Hdc1 As Long, Hdc2 As Long

'Comparamos solo el tamaño corrspondiente a la menos de las imágenes
Px = ScaleX(IIf(pic1.Width < pic2.Width, pic1.Width, pic2.Width), vbTwips, vbPixels) ' / Screen.TwipsPerPixelX
Py = ScaleY(IIf(pic1.Height < pic2.Height, pic1.Height, pic2.Height), vbTwips, vbPixels) ' / Screen.TwipsPerPixelY

'Localizar los Handles de las imagenes
Hdc1 = CreateCompatibleDC(hdc)
SelectObject Hdc1, pic1.Picture.Handle
Hdc2 = CreateCompatibleDC(hdc)
SelectObject Hdc2, pic2.Picture.Handle

'Recorrer comparando
For Cx = 0 To Px - 1
For Cy = 0 To Py - 1
If GetPixel(Hdc1, Cx, Cy) <> GetPixel(Hdc2, Cx, Cy) Then nDistintos = nDistintos + 1
Next Cy
Next Cx

'Eliminar los handles
Call DeleteDC(Hdc1)
Call DeleteDC(Hdc2)
CompararPictures = nDistintos / (Px * Py) * 100
End Function

Saludos!!
l_island