Título: Funciones útiles con gráficos (GDI+) Publicado por: ABDERRAMAH en 4 Septiembre 2012, 16:09 pm Ahí va una lista de funciones en vb.net para efectuar las operaciones con imágenes más simples pero más necesarias para usar el interface GDI+. Al usar múltiples capas, por ejemplo en un personaje con ropa donde provienen de diferentes imágenes es una buena idea usar la función add_layer para superponer las dos imágenes y utilizar en adelante la imágen acoplada, así sustituimos 2 pasadas de dibujo, o las que nos sean necesarias por tan sólo una. Otra buena idea es usar la carga con resolución fija, para así disponer de imágenes más ligeras de manejar y por lo tanto de dibujar. Dado que las funciones de dibujo de texto requieren muchos parámetros en el interface gdi+ incluyo también varias funciones de rasterizado de texto, las cuales devuelven una imágen con el texto impreso. Las funciones están sobrecargadas, hay dos o tres versiones de cada una con diferente número de parámetros.
Cualquier duda me preguntais. Citar 'leer una imágen desde archivo Public Function read_image(ByVal file As String) As System.Drawing.Bitmap Dim img As New Bitmap(file) Return img End Function Public Function read_image(ByVal file As String, ByVal sizex As Integer, ByVal sizey As Integer) As System.Drawing.Bitmap Dim img As New Bitmap(file) Dim b As New Bitmap(sizex, sizey) Dim bg As Graphics = Graphics.FromImage(b) bg.DrawImage(img, New Rectangle(New Point(0, 0), New Size(sizex, sizey)), New Rectangle(0, 0, img.Width, img.Height), GraphicsUnit.Pixel) Return b End Function 'redimensionar una imágen Public Function resize_bmp(ByVal img As Bitmap, ByVal sizex As Integer, ByVal sizey As Integer) As Bitmap Dim b As New Bitmap(sizex, sizey) Dim bg As Graphics = Graphics.FromImage(b) bg.DrawImage(img, New Rectangle(New Point(0, 0), New Size(sizex, sizey)), New Rectangle(0, 0, img.Width, img.Height), GraphicsUnit.Pixel) Return b End Function Public Function resize_bmp(ByVal img As Bitmap, ByVal size As Size) As Bitmap Dim b As New Bitmap(size.Width, size.Height) Dim bg As Graphics = Graphics.FromImage(b) bg.DrawImage(img, New Rectangle(New Point(0, 0), New Size(size.Width, size.Height)), New Rectangle(0, 0, img.Width, img.Height), GraphicsUnit.Pixel) Return b End Function ' extraer una porción de una imágen ' image = imagen a recortar ' cuadriculax y cuadriculay = número de sectores por cada dimensión ' sectorx y sectory = vector puntero de la selección Public Function get_portion(ByVal image As System.Drawing.Bitmap, ByVal cuadriculax As Short, ByVal cuadriculay As Short, ByVal sectorx As Integer, ByVal sectory As Integer) As System.Drawing.Bitmap Dim img As New Bitmap(CInt(image.Size.Width / cuadriculax), CInt(image.Size.Height / cuadriculay)) 'Dim b As New Bitmap(CInt(image.Size.Width / cuadriculax), CInt(image.Size.Height / cuadriculay)) Dim bg As Graphics = Graphics.FromImage(img) Dim tmpx As Integer = (image.Size.Width / cuadriculax) * sectorx Dim tmpy As Integer = (image.Size.Height / cuadriculay) * sectory Dim port As New Rectangle(New System.Drawing.Point(0, 0), New Size(New Point(image.Size.Width / cuadriculax, image.Size.Height / cuadriculay))) bg.DrawImage(image, port, tmpx, tmpy, CInt(port.Size.Width), CInt(port.Size.Height), GraphicsUnit.Pixel) Return img End Function Public Function get_portion(ByVal image As System.Drawing.Bitmap, ByVal cuadricula As System.Drawing.Size, ByVal sector As System.Drawing.Size) As System.Drawing.Bitmap Dim img As New Bitmap(CInt(image.Size.Width / cuadricula.Width), CInt(image.Size.Height / cuadricula.Height)) 'Dim b As New Bitmap(CInt(image.Size.Width / cuadricula.Width), CInt(image.Size.Height / cuadricula.Height)) Dim bg As Graphics = Graphics.FromImage(img) Dim tmpx As Integer = (image.Size.Width / cuadricula.Width) * sector.Width Dim tmpy As Integer = (image.Size.Height / cuadricula.Height) * sector.Height Dim port As New Rectangle(New System.Drawing.Point(0, 0), New Size(New Point(image.Size.Width / cuadricula.Width, image.Size.Height / cuadricula.Height))) bg.DrawImage(image, port, tmpx, tmpy, CInt(port.Size.Width), CInt(port.Size.Height), GraphicsUnit.Pixel) Return img End Function ' sobredibujar una imágen sobre otra Public Function layer_sum(ByVal layer1 As Bitmap, ByVal layer2 As Bitmap) As Bitmap Dim bg As Graphics = Graphics.FromImage(layer1) bg.DrawImage(layer2, New Point(0, 0)) Return layer1 End Function Public Function layer_sum(ByVal layer1 As Bitmap, ByVal layer2 As Bitmap, ByVal offsetx As Integer, ByVal offsety As Integer) As Bitmap Dim bg As Graphics = Graphics.FromImage(layer1) bg.DrawImage(layer2, New Point(offsetx, offsety)) Return layer1 End Function ' dibujar una imágen de texto rasterizado Public Function get_text_layer(ByVal size As System.Drawing.Size, ByVal text As String) As System.Drawing.Bitmap Dim img As New Bitmap(size.Width, size.Height) Dim bg As Graphics = Graphics.FromImage(img) bg.DrawString(text, New Font("Arial", 12, FontStyle.Bold), Brushes.Black, New Point(1, -1)) bg.DrawString(text, New Font("Arial", 12, FontStyle.Bold), Brushes.White, New Point(0, 0)) Return img End Function Public Function get_text_layer(ByVal sizex As Integer, ByVal sizey As Integer, ByVal text As String) As System.Drawing.Bitmap Dim img As New Bitmap(sizex, sizey) Dim bg As Graphics = Graphics.FromImage(img) bg.DrawString(text, New Font("Arial", 12, FontStyle.Bold), Brushes.Black, New Point(1, -1)) bg.DrawString(text, New Font("Arial", 12, FontStyle.Bold), Brushes.White, New Point(0, 0)) Return img End Function Public Function get_text_layer(ByVal sizex As Integer, ByVal sizey As Integer, ByVal text As String, ByVal fontsize As Integer) As System.Drawing.Bitmap Dim img As New Bitmap(sizex, sizey) Dim bg As Graphics = Graphics.FromImage(img) bg.DrawString(text, New Font("Arial", fontsize, FontStyle.Bold), Brushes.Black, New Point(1, -1)) bg.DrawString(text, New Font("Arial", fontsize, FontStyle.Bold), Brushes.White, New Point(0, 0)) Return img End Function 'code by abderramah |