El programa lo tengo bastante avanzado y he implementado todas estas operaciones, ya que no quiero utilizar librerías de terceros, y algunas de las funciones que utilizo son bastante raras, imagino. El resultado es bueno, pero puede llevar unos cuantos segundos el generar la imagen final.
El problema es que mis funciones trabajan a nivel de píxel... es decir, modifico los valores de cada píxel individualmente, y claro, para imágenes grandes...
Sin embargo está claro que existen soluciones muchísimo más eficientes (por ejemplo, las operaciones gráficas que realiza el objeto Graphics en .NET).
En definitiva, me gustaría conocer la forma de hacer mis funciones gráficas más eficientes. Alguien puede echarme una mano?
Muchísimas gracias.
PD: Aquí pongo un ejemplo de una función sencillita para aplicar un mapa de opacidad a una imagen. Lo que cuenta es la idea y el procedimiento, no la función en sí.
Código VB:
Ver original
''' <summary> ''' Aplica un mapa de opacidad a una imagen y la devuelve con ''' el canal alpha correspondiente a este mapa de opacidad ''' </summary> Public Function ApplyOpacityMap(ByVal DiffuseImage As Image, _ ByVal OpacityImage As Image) As Image Dim imgDiffuse As Bitmap = DiffuseImage.Clone Dim imgOpacity As Bitmap = OpacityImage.Clone Dim imgResult As New Bitmap(imgDiffuse.Width, imgDiffuse.Height) Dim NuevoColor As Color Dim PixelColor As Color Dim AlphaValue As Integer For Y = 0 To imgDiffuse.Height - 1 For X = 0 To imgDiffuse.Width - 1 'Se extrae el valor Alpha que tendrá el píxel a partir del mapa de opacidad PixelColor = imgOpacity.GetPixel(X, Y) AlphaValue = PixelColor.GetBrightness * 255 'Se estrae el píxel del mapa difuso PixelColor = imgDiffuse.GetPixel(X, Y) NuevoColor = Color.FromArgb(AlphaValue, PixelColor.R, PixelColor.G, PixelColor.B) imgResult.SetPixel(X, Y, NuevoColor) Next Application.DoEvents() Next Return imgResult End Function
Saludos!!!