Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

comparar el contenido de 2 image diferentes

Estas en el tema de comparar el contenido de 2 image diferentes en el foro de Visual Basic clásico en Foros del Web. Gracias por su atención; Tengo 2 form: Form1 y Form2. Cada uno de ellos tiene 3 control image, en el Form1 cada Image tiene una ...
  #1 (permalink)  
Antiguo 24/10/2010, 11:47
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 14 años, 1 mes
Puntos: 0
Pregunta comparar el contenido de 2 image diferentes

Gracias por su atención;
Tengo 2 form: Form1 y Form2. Cada uno de ellos tiene 3 control image, en el Form1 cada Image tiene una figura ejemlo: Image1 =carro, Image2 =pelota y Image3=mesa.
Estas mismas figuras estan en los 3 control image de Form2, pero desordenadas, es decir Image1=pelota, Image2=mesa, Image3=carro. Y las muevo a voluntad mediante dragdrop.
Lo que requiero es ¿cómo hacer para que cuando las ubicaciones de las 3 imagenes de los 3 control image de Form2, coincidan con la ubicacion de las 3 imagenes de los 3 control image de Form1, de un aviso "beep" o ejecute otra rutina?
  #2 (permalink)  
Antiguo 24/10/2010, 12:21
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: comparar el contenido de 2 image diferentes

Hola, no se si lo que pides es posible, pero te diré lo que hice yo en una ocasión en que para aprender simulé un juego e parejas.

Al cargar la imagen en en Image.Picture, ponia el nombre del archivo en el Image.Tag.

La propiedad Tag puede utilizarse para cualquier propósito que nos sea de utilidad.

De este modo al intercambiar con tu drag/drop la imagen, debes tambien intercambiar el .Tag con lo que después al comparar esta propiedad sabes realmente que imagen tienes cargada y si es la misma.

Si no me he expresado bien, dilo y lo comentamos.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #3 (permalink)  
Antiguo 25/10/2010, 16:08
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 14 años, 1 mes
Puntos: 0
Sonrisa Respuesta: comparar el contenido de 2 image diferentes

Gracias estimado Eburson por tu sugerencia. Lo que he realizado es cargar el nombre del archivo desplazado con el drag a la propiedad Image1.Toltiptext, que me funciona cuando comparo con el Image2.Toltiptext. Es decir cuando comparo 2 Image diferentes no indexados.Sin embargo, cuando se trata de Image indexados es decir Image1(0), Image1(1), etc. y realizo la operación de cargar la ruta del archivo cargado en la propiedad . Toltiptext de ambos Image1(x) indexados para compararlos, arroja que no son iguales porque el .Toltiptext del Image(x) indexado donde cargo el path del archivo agrega al path números adicionales, por lo que nunca coinciden, ambos .toltiptext donde se cargaron el path de los archivos.
Sin embargo probare cargando el path de ambos archivos ubicados en Image1 indexados, cargandolos en la propiedad .tag de cada uno de llos y comparando. Veremos que sucede ?

Con gratitud,

Felipe
  #4 (permalink)  
Antiguo 26/10/2010, 00:09
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: comparar el contenido de 2 image diferentes

Hola, lo de añadir números adicionales me parece que no tiene mucho sentido ya que tu cargas el fichero y tu pones el tooltip, aunque se trate de imagenes indexadas, por lo que debe tratarse de algún lapsus en el código.

Piensa que realmente lo importante no es la imagen en si sino el contenido de la variable.

Ignoro si las imágenes las cargas en tiempo de diseño o en tiempo de ejecución pero realmente tiene que dar lo mismo.

Supongamos tus ejemplos.

Image1.Tag = "carro"
Image2.Tag = "pelota"
Image3.Tag = "mesa"

Image4(0).Tag = "carro"
Image4(1).Tag = "pelota"
Image4(2).Tag = "mesa"

Cuando intercambias el .Picture en el Drag/Drop, debes intercambiar su ,Tag y de este modo el Picture en si no es mas que un efecto óptico ya que tu comparación se basa en el .Tag

Pienso que debería funcionar por lo que algo esta fallando pero tiene que ser un simple error de lógica.

Si no termina de andar, pega el código donde cargas la imagen y el codigo cuando haces el Drag/Drop y le doy un vistazo.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #5 (permalink)  
Antiguo 27/10/2010, 14:54
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 14 años, 1 mes
Puntos: 0
Información Respuesta: comparar el contenido de 2 image diferentes

En el Form1: se ubican 3 control Image1(index) medianos conteniendo 3 figuras desordenadas.
Las mismas figuras estan contenidas de manera ordenada en 3 Image2(index) más pequeños.
[B]La tarea consiste en ordenar las 3 figuras del Image1(index) mediante dragdrop, y al lograrlo y coincidir con las del Image2(index) se pueda dar una alarma o ejecutir otra rutina.[/B]

ADJUNTO CODIGO REALIZADO, GRACIAS POR SU ATENCIÓN Y APOYO.

Option Explicit
Dim imagen As Object
Dim nn As Integer

Private Sub Form_Load()
Dim x As Integer
Dim nomfig As String
Image1(0).Picture = LoadPicture("D:\VB\prac\e\fg3.jpg")
Image1(1).Picture = LoadPicture("D:\VB\prac\e\fg1.jpg")
Image1(2).Picture = LoadPicture("D:\VB\prac\e\fg2.jpg")

For x = 0 To 2
nomfig = App.Path & "\fg" & x & ".jpg"
Image2(x) = LoadPicture(nomfig)
Next x
End Sub

Private Sub Image1_DragDrop(Index As Integer, Source As Control, x As Single, Y As Single)

Set imagen = Image1(Index).Picture
If nn = 0 Then
Image1(Index) = Source.Picture
Source.Picture = imagen
ElseIf nn = 1 Then
Image1(Index) = Source.Picture
Source.Picture = imagen
ElseIf nn = 2 Then
Image1(Index) = Source.Picture
Source.Picture = imagen
End If

End Sub
Private Sub Image1_MouseDown(Index As Integer, Button As Integer, Shift As Integer, x As Single, Y As Single)
nn = Image1(Index).Index
If Button = 1 Then
Image1(Index).Drag
End If
End Sub


Felipe
  #6 (permalink)  
Antiguo 28/10/2010, 05:06
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 3 meses
Puntos: 29
Respuesta: comparar el contenido de 2 image diferentes

No sé como lo haces, pero si arrastras los pictures como imagino, moviendo el contenido pero no cambiando de sitio el propio picture, podrías comparar las imágenes como cadenas de texto y contar las que coinciden:

Código vb:
Ver original
  1. Private Declare Function GetBitmapBits Lib "gdi32" _
  2.     (ByVal hBitmap As Long, ByVal dwCount As Long, _
  3.     lpBits As Any) As Long
  4.  
  5. Private Declare Function GetObject Lib "gdi32" Alias _
  6.     "GetObjectA" (ByVal hObject As Long, ByVal nCount _
  7.     As Long, lpObject As Any) As Long
  8.  
  9. Private Type BITMAP
  10.       bmType As Long
  11.       bmWidth As Long
  12.       bmHeight As Long
  13.       bmWidthBytes As Long
  14.       bmPlanes As Integer
  15.       bmBitsPixel As Integer
  16.       bmBits As Long
  17. End Type
  18.  
  19. Private Function PictureToString(pic As PictureBox) As String
  20.  
  21.       Dim tBitmap As BITMAP
  22.       Dim bPicBytes() As Byte
  23.       Dim lByteLen As Long
  24.       GetObject Picture1.Image.Handle, Len(tBitmap), tBitmap
  25.       lByteLen = tBitmap.bmWidthBytes * tBitmap.bmHeight
  26.       ReDim bPicBytes(1 To lByteLen)
  27.       GetBitmapBits pic.Picture.Handle, UBound(bPicBytes), bPicBytes(1)
  28.        
  29.       PictureToString = bPicBytes
  30. End Function
  31.  
  32. Private Function ComparaPics(Pic1 As PictureBox, Pic2 As PictureBox) As Boolean
  33.   Dim strPic1 As String
  34.   Dim strPic2 As String
  35.  
  36.   strPic1 = PictureToString(Pic1)
  37.   strPic2 = PictureToString(Pic2)
  38.  
  39.   ComparaPics = (strPic1 = strPic2)
  40.  
  41. End Function

Y cuando desplaces un picture comparas todos.

Dim Iguales As Integer
If ComparaPics(Form1.Picture1, Form2.Picture1) Then iguales = iguales + 1
If ComparaPics(Form1.Picture2, Form2.Picture2) Then iguales = iguales + 1
If ComparaPics(Form1.Picture3, Form2.Picture3) Then iguales = iguales + 1
If iguales=3 Then Msgbox "Completado"

Saludos
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #7 (permalink)  
Antiguo 28/10/2010, 06:01
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: comparar el contenido de 2 image diferentes

Hola, siento insistir en los mismo, pero creo que lo mejor es utilizar la propiedad tag para controlar la imagen que tienes en el Image, después comparas la misma y si son iguales BINGO

Image1(0).Picture = LoadPicture("D:\VB\prac\e\fg3.jpg")
Image1(0).Tag = "fg3.jpg"

nomfig = App.Path & "\fg" & x & ".jpg"
Image2(x) = LoadPicture(nomfig)
Image2(x).Tag = "fg" & x & ".jpg"

Cuando hagas el Drag/Drop como te decia, intercambia ademas de la Imagen el TAG

Compara después la coincidencia de los TAG

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #8 (permalink)  
Antiguo 28/10/2010, 06:50
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 3 meses
Puntos: 29
Respuesta: comparar el contenido de 2 image diferentes

Hay un fallo en mi código, y como la política del foro ha cambiado y no puedo editar mis propios mensajes, lo pondré aquí:

La línea:
GetObject Picture1.Image.Handle, Len(tBitmap), tBitmap

Debería ser:
GetObject Pic.Image.Handle, Len(tBitmap), tBitmap

Saludos

PD: Aprovecho que aún puedo editar para rectificar.

Pues no... parece ser que si cambio esa línea no funciona y no veo el por qué.
Debe existir un Picture1 y la línea debe ser como antes:

GetObject Picture1.Image.Handle, Len(tBitmap), tBitmap

O cambiar por otro picture, pero claro, un picture que exista.

GetObject Picture4.Image.Handle, Len(tBitmap), tBitmap
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Última edición por pkj; 28/10/2010 a las 06:56
  #9 (permalink)  
Antiguo 28/10/2010, 08:43
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: comparar el contenido de 2 image diferentes

Hola pkj:

Fantástico el código para comparación de Imágenes, pero tal vez el problema esta en que según el mensaje de Felipe, o por lo que creo interpretar en su código las imágenes no son realmente las mismas ya que indica que unas son mas pequeñas e imgino que no se trata de que sea mas pequeño el Control/Contenedor sino la imagen propiamente.

De ser así realmente la comparación no creo que funcione ya que en realidad se trata de imágenes distintas.

Esperemos sus comentarios aclarando el tema o indicando algo al respecto.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #10 (permalink)  
Antiguo 28/10/2010, 08:54
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 3 meses
Puntos: 29
Respuesta: comparar el contenido de 2 image diferentes

Como bien dices, erbuson, el método más barato es el de guardar una referencia en el tag, ya sea el nombre del fichero como un número o cualquier cosa que distinga una imagen de otra, y luego solo comparar los valores.
Yo solo intento darle otras opciones por si lo ve mas claro. Lo del tamaño de las imágenes no lo he visto, ya que no he leído todo con atención. Es posible que en ese caso no sirva el sistema.

Saludos
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #11 (permalink)  
Antiguo 29/10/2010, 14:40
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 14 años, 1 mes
Puntos: 0
Pregunta Respuesta: comparar el contenido de 2 image diferentes

Estimado Erbuson no se si estará bien el código en el queintentocomparar mediante "Tags". dado quehe probado su propuesta y no funciona, suena el "beep" en cuanto se traslada una imagen del Image1(0) al Image1(1), más no cuando ambas Imágenes coinciden.
Hay que considerar que el el Image2(index) que son más pequeñas, las mismas imágenes, estan ordenadas; en Image2(0)= "árbol", Image2(1) = "bicicleta", Image2(2)="casa" y permanecen asi constantemente.
Sin embargo es el Image1(index) el que traslada imágenes y por lotanto debe sonar el "Beep" cuando a Image1(0) se traslade el "árbol", a Image1(1) se traslade "Bicicleta", y a Image1(2) se traslade "casa". Lo que no sucede suena el Beep sin considerar esta situación ¿ ... ?

Private Sub Form_Load()
Dim x As Integer
Dim nomfig As String
Image1(0).Picture = LoadPicture("D:\VB\prac\e\fg3.jpg")
Image1(0).Tag = "fg3.jpg"
Image1(1).Picture = LoadPicture("D:\VB\prac\e\fg1.jpg")
Image1(1).Tag = "fg1.jpg"
Image1(2).Picture = LoadPicture("D:\VB\prac\e\fg2.jpg")
Image1(2).Tag = "fg2.jpg"

For x = 0 To 2
nomfig = App.Path & "\fg" & x & ".jpg"
Image2(x) = LoadPicture(nomfig)
Image2(x).Tag="fg" & x & ".jpg"
Next x
End Sub

Private Sub Image1_DragDrop(Index As Integer, Source As Control, x As Single, Y As Single)

Set imagen = Image1(Index).Picture
If nn = 0 Then
Image1(Index) = Source.Picture
Source.Picture = imagen
if Image1(index).Tag = Image2(nn).Tag="fg" & x & ".jpg" Then
beep
End if
ElseIf nn = 1 Then
Image1(Index) = Source.Picture
Source.Picture = imagen
if Image1(index).Tag = Image2(nn).Tag="fg" & x & ".jpg" Then
beep
End if
ElseIf nn = 2 Then
Image1(Index) = Source.Picture
Source.Picture = imagen
if Image1(index).Tag = Image2(nn).Tag="fg" & x & ".jpg" Then
beep
End if

End If

End Sub
Private Sub Image1_MouseDown(Index As Integer, Button As Integer, Shift As Integer, x As Single, Y As Single)
nn = Image1(Index).Index
If Button = 1 Then
Image1(Index).Drag
End If
End Sub


Seguiré intentando ...

Felipe
  #12 (permalink)  
Antiguo 30/10/2010, 07:30
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 3 meses
Puntos: 29
Respuesta: comparar el contenido de 2 image diferentes

Intentando seguir tu código me ha quedado esto que parece funcionar, aunque seguramente se puede mejorar.

Código vb:
Ver original
  1. Option Explicit
  2.  
  3. Private Sub Form_Load()
  4.   Dim x As Integer
  5.   Dim nomfig As String
  6.   Image1(0).Picture = LoadPicture("fg2.jpg")
  7.   Image1(0).Tag = "fg2.jpg"
  8.   Image1(1).Picture = LoadPicture("fg0.jpg")
  9.   Image1(1).Tag = "fg0.jpg"
  10.   Image1(2).Picture = LoadPicture("fg1.jpg")
  11.   Image1(2).Tag = "fg1.jpg"
  12.  
  13.   For x = 0 To 2
  14.     nomfig = App.Path & "\fg" & x & ".jpg"
  15.     Image2(x) = LoadPicture(nomfig)
  16.     Image2(x).Tag = "fg" & x & ".jpg"
  17.   Next x
  18. End Sub
  19.  
  20. Private Sub Image1_DragDrop(Index As Integer, Source As Control, x As Single, Y As Single)
  21.   Dim eltag As String
  22.   Dim imagen As Object
  23.   eltag = Image1(Index).Tag
  24.   Set imagen = Image1(Index).Picture
  25.   Image1(Index).Picture = Source.Picture
  26.   Image1(Index).Tag = Source.Tag
  27.   Source.Picture = imagen
  28.   Source.Tag = eltag
  29.   Dim f As Integer
  30.   For f = 0 To 2
  31.     If Image1(f).Tag <> Image2(f).Tag Then Exit For
  32.   Next f
  33.   If f = 3 Then MsgBox "encontrado"
  34. End Sub
  35. Private Sub Image1_MouseDown(Index As Integer, Button As Integer, Shift As Integer, x As Single, Y As Single)
  36.   If Button = 1 Then
  37.     Image1(Index).Drag
  38.   End If
  39. End Sub

Saludos
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #13 (permalink)  
Antiguo 31/10/2010, 11:45
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: comparar el contenido de 2 image diferentes

Hola estimado Erbuson

Tu recomendación funcionó muy bien,

Muchas Gracias, muy reconocido, estaremos en contacto.

Felipe
  #14 (permalink)  
Antiguo 31/10/2010, 11:47
 
Fecha de Ingreso: octubre-2010
Mensajes: 9
Antigüedad: 14 años, 1 mes
Puntos: 0
De acuerdo Respuesta: comparar el contenido de 2 image diferentes

Hola estimado Erbuson

La sugerencia de los Tags funcionó, excelente

Muy agradecido, estamos en contacto.

Mi especial reconocimiento, hasta pronto.

Felipe

Etiquetas: comparar, contenido, diferentes, image
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:16.