Los anaglifos son, según la Wikipedia, imágenes de dos dimensiones capaces de provocar un efecto tridimensional, cuando se ven con lentes especiales (lentes de color diferente para cada ojo). Con el siguiente ejemplo de un anaglifo seguro que queda más claro.
![]() |
Anaglifo |
Para poder ver estas imágenes en 3D, serían necesarias unas gafas anafligo.
La imagen se forma a partir de dos imágenes muy próximas. Los pasos son los siguientes:
- A la imagen de la izquierda, se le quitan los colores verde y azul, y a la derecha se le quita la componente rojo
- Se suman las imágenes.
Para que quede más claro, en vez de agrupar todo en una función, vamos a separarlo en 3 funciones. La primera función, denominada ExtraeVerdeAzul, que recibe una imagen.
Function ExtraeVerdeAzul(ByVal ImagenIzquierda As Bitmap) As Bitmap 'Dejamos pasar sólo el rojo Dim Rojo As Byte Dim ImagenSalida As New Bitmap(ImagenIzquierda.Width, ImagenIzquierda.Height) For i = 0 To ImagenIzquierda.Width - 1 'Recorremos la matriz For j = 0 To ImagenIzquierda.Height - 1 Rojo = ImagenIzquierda.GetPixel(i, j).R ImagenSalida.SetPixel(i, j, Color.FromArgb(Rojo, 0, 0)) 'Sólo almacenamos el rojo Next Next Return ImagenSalida End Function
La función extraerá el color rojo y se llama ExtraeRojo
Function ExtraeRojo(ByVal ImagenDerecha As Bitmap) As Bitmap 'Dejamos pasar sólo el rojo Dim Verde, Azul As Byte Dim ImagenSalida As New Bitmap(ImagenDerecha.Width, ImagenDerecha.Height) For i = 0 To ImagenDerecha.Width - 1 'Recorremos la matriz For j = 0 To ImagenDerecha.Height - 1 Verde = ImagenDerecha.GetPixel(i, j).G Azul = ImagenDerecha.GetPixel(i, j).B ImagenSalida.SetPixel(i, j, Color.FromArgb(0, Verde, Azul)) 'Sólo almacenamos el verde y azul Next Next Return ImagenSalida End Function
Por último la siguiente función suma las imágenes.
Function SumaImagenes(ByVal ImagenIzquierda As Bitmap, ByVal ImagenDerecha As Bitmap) As Bitmap Dim Rojo, Verde, Azul As Integer 'Declaramos tres variables que almacenarán los colores Dim bmpSalida As New Bitmap(ImagenIzquierda.Width, ImagenIzquierda.Height) For i = 0 To ImagenIzquierda.Width - 1 'Recorremos la matriz For j = 0 To ImagenIzquierda.Height - 1 'Extraemos color rojo de la imagen de la izquierda y verde/azul de la derecha Rojo = ImagenIzquierda.GetPixel(i, j).R Verde = ImagenDerecha.GetPixel(i, j).G Azul = ImagenDerecha.GetPixel(i, j).B bmpSalida.SetPixel(i, j, Color.FromArgb(Rojo, Verde, Azul)) 'Asignamos a bmp los colores Next Next Return bmpSalida End Function
Vamos a suponer que tenemos un formulario con 3 Picturebox y un botón.
![]() |
Imagen del formulario. |
Hacemos doble clic sobre el botón y agregamos el siguiente código.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim bmpIzqui As Bitmap bmpIzqui = ExtraeVerdeAzul(PictureBox1.Image) Dim bmpDerecha As Bitmap bmpDerecha = ExtraeRojo(PictureBox2.Image) Dim ImagenAnaglifo As Bitmap ImagenAnaglifo = SumaImagenes(bmpIzqui, bmpDerecha) PictureBox3.Image = ImagenAnaglifo End Sub
Ejecutamos la aplicación, pulsamos en el botón y crea el anaglifo.
![]() |
Resultado final del anaglifo. |
hola
ResponderEliminarme han servido de mucha ayuda tus tutoriales
pero tengo un problema con este efecto no me funciona.
¿Qué es lo que no te funciona en concreto?
ResponderEliminarDescargue el ejemplo y lo probe, funciona de maravilla pero cuando cambio de imagen no funciona , la imagen se queda igual.
ResponderEliminarUso visual studio 2010 ultimate
Otra cosa no tendras un codio para realizar un desenfoque gaussiono en vb.net o c#
Pues yo cambio la imagen directamente en el Picturebox (eso sí, teniendo en cuenta que ambas imágenes deben tener el mismo tamaño), y me aplica bien la transformación.
ResponderEliminarLo probé utilizando VS 2012.
Un saludo
hola soy alex de bolivia soy seguidor de tus tutoriales .
ResponderEliminardisculpa quisiera hacerte una pregunta ,vamos mas q pregunta una orientacion COMO PUEDO TRANSFORMAR UNA IMAGEN EN COORDENADAS CARTESIANAS, A UNA IMAGEN EN COORDENADAS POLARES, Q CLASES ME RECOMIENDAS??