Para re dimensionar una imagen sin perder el aspecto usamos el siguiente codigo:
Public Function Redimensiona(ByVal altura As Integer, ByVal imagen As Stream) As MemoryStream
Dim imagenOriginal As System.Drawing.Image = System.Drawing.Image.FromStream(imagen)
Dim imagenRedimensionada As Image
'Calculamos el porcentaje al que se redujo la altura
Dim Porcentaje = altura / imagenOriginal.Height
'Entonces el ancho de la imagen reducida se calcula asi
Dim Ancho As Double = Porcentaje * imagenOriginal.Width
'Asignamos la nueva dimension a la imagen
imagenRedimensionada = New Bitmap(Ancho, altura, PixelFormat.Format32bppRgb)
'creamos un objeto graphics desde la nueva imagen
Using gr As Graphics = Graphics.FromImage(imagenRedimensionada)
'en la nueva imagen "dibujamos" la antigua imagen con las dimensiones de la nueva imagen
gr.CompositingMode = CompositingMode.SourceOver
gr.CompositingQuality = CompositingQuality.AssumeLinear
gr.DrawImage(imagenOriginal, 0, 0, imagenRedimensionada.Width, imagenRedimensionada.Height)
End Using
Dim Modificada As New MemoryStream()
imagenRedimensionada.Save(Modificada, System.Drawing.Imaging.ImageFormat.Jpeg)
imagenOriginal.Dispose()
imagenRedimensionada.Dispose()
Return Modificada
End Function
Public Function Redimensiona(ByVal altura As Integer, ByVal imagen As Stream) As MemoryStream
Dim imagenOriginal As System.Drawing.Image = System.Drawing.Image.FromStream(imagen)
Dim imagenRedimensionada As Image
'Calculamos el porcentaje al que se redujo la altura
Dim Porcentaje = altura / imagenOriginal.Height
'Entonces el ancho de la imagen reducida se calcula asi
Dim Ancho As Double = Porcentaje * imagenOriginal.Width
'Asignamos la nueva dimension a la imagen
imagenRedimensionada = New Bitmap(Ancho, altura, PixelFormat.Format32bppRgb)
'creamos un objeto graphics desde la nueva imagen
Using gr As Graphics = Graphics.FromImage(imagenRedimensionada)
'en la nueva imagen "dibujamos" la antigua imagen con las dimensiones de la nueva imagen
gr.CompositingMode = CompositingMode.SourceOver
gr.CompositingQuality = CompositingQuality.AssumeLinear
gr.DrawImage(imagenOriginal, 0, 0, imagenRedimensionada.Width, imagenRedimensionada.Height)
End Using
Dim Modificada As New MemoryStream()
imagenRedimensionada.Save(Modificada, System.Drawing.Imaging.ImageFormat.Jpeg)
imagenOriginal.Dispose()
imagenRedimensionada.Dispose()
Return Modificada
End Function
Comentarios
Publicar un comentario
toda duda o sugerencia sea bienvenida...