Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/02/2016, 10:14
Avatar de izar
izar
 
Fecha de Ingreso: enero-2004
Mensajes: 519
Antigüedad: 20 años, 9 meses
Puntos: 1
redimension de imagen, pierde calidad

al hacer un resize de una imagen a un tamaño menor, pierde calidad.

Este es mi funcion

Podeis echarme un cable

gracias

Código:
  Public Sub RedimensionarImagen(ByVal imagen As String, ByVal DimensionMax As Integer, Optional ByVal SubCarpeta As String = "", Optional ByVal ImagenPeq As Boolean = False)
        Dim original As System.Drawing.Image = System.Drawing.Image.FromFile(imagen)
        Dim imgPhoto As System.Drawing.Image = System.Drawing.Image.FromFile(imagen)

        'Establecemos las nuevas medidas
        Dim ancho, alto As Integer
        If original.Width > original.Height Then
            alto = DimensionMax * original.Height / original.Width
            ancho = DimensionMax
        Else
            alto = DimensionMax
            ancho = DimensionMax * original.Width / original.Height
        End If

        Dim bmPhoto As New Bitmap(ancho, alto, PixelFormat.Format24bppRgb)
        Dim grPhoto As Graphics = Graphics.FromImage(bmPhoto)

        With grPhoto

         
            .SmoothingMode = SmoothingMode.AntiAlias
            .InterpolationMode = InterpolationMode.HighQualityBicubic
            .CompositingQuality = CompositingQuality.HighQuality
            .PixelOffsetMode = PixelOffsetMode.HighQuality
            .DrawImage(imgPhoto, New Rectangle(0, 0, ancho, alto), New Rectangle(0, 0, original.Width, original.Height), GraphicsUnit.Pixel)
        End With

        'Generamos el nombre para el fichero redimensionado
        Dim nuevoFic As String = Path.GetDirectoryName(imagen)
        If nuevoFic.EndsWith(Path.DirectorySeparatorChar) = False Then
            nuevoFic &= Path.DirectorySeparatorChar
        End If
        'Solo si se necesita una imagen nueva
        If ImagenPeq Then
            nuevoFic &= Path.GetFileNameWithoutExtension(imagen) & "_peq" & Path.GetExtension(imagen)
        Else
            nuevoFic &= Path.GetFileNameWithoutExtension(imagen) & Path.GetExtension(imagen)
        End If

        'se libera para que no haya problemas con el GDI
        original.Dispose()
        imgPhoto.Dispose()
        'Grabamos la nueva foto una vez que liberamos de la memoria la imagen por si no se renombra
        bmPhoto.Save(nuevoFic, Imaging.ImageFormat.Jpeg)
        'si hay subcarpeta se mueve a ella
        grPhoto.Dispose()
        bmPhoto.Dispose()

        'si existe la subcarpeta se mueve a esta subcarpeta
        If Len(SubCarpeta) > 0 Then
            SubCarpeta = Path.GetDirectoryName(imagen) & "\" & SubCarpeta & "\" & Path.GetFileNameWithoutExtension(imagen) & "_peq" & Path.GetExtension(imagen)
            File.Move(nuevoFic, SubCarpeta)
        End If

    End Sub