Re dimensionar una Imagen

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

Comentarios