ExtraGeek

La Tecnologia vista da me

[VB.NET] Funzione per ridimensionare immagine

In un mio ultimo lavoro ho dovuto affrontare il problema di dover ridimensionare a run-time alcune immagini. Devo dire che è stato il primo progetto in cui ho affrontato certi argomenti e quindi ho dovuto fare un po' di ricerca e studio.

Il ridimensionamento di un'immagine è un lavoro che dovrà essere svolto dalla libreria System.Drawing che dovrà quindi essere referenziata nella giusta maniera.

' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Questa funzione restituisce una versione ridimensionata di un'immagine fornita
' Input:
'   immagine (Image)
'   dimensioni (Size)
'   mantieniAspectRatio (Boolean default True)
' Output:
'    ResizeImmagine (Image)
' by ExtraGeek.Com
' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Shared Function ResizeImmagine(ByVal immagine As Image, ByVal dimensioni As Size,
                                           Optional ByVal mantieniAspectRatio As Boolean = True) As Image
 
            Dim nuovaWidth As Integer
            Dim nuovaHeight As Integer

            ' Verifico se necessario mantenere il rapporto fra le dimensioni
            If mantieniAspectRatio Then
                Dim originaleWidth As Integer = immagine.Width
                Dim originaleHeight As Integer = immagine.Height
                Dim rapportoWidth As Single = CSng(dimensioni.Width) / CSng(originaleWidth)
                Dim rapportoHeight As Single = CSng(dimensioni.Height) / CSng(originaleHeight)

                'Calcolo il rapporto
                Dim rapporto As Single = If(rapportoHeight < rapportoWidth,
                rapportoHeight, rapportoWidth)
                
                'Assegno le nuove dimensioni calcolate sul rapporto fra di esse
                nuovaWidth = CInt(rapportoWidth * rapporto)
                nuovaHeight = CInt(rapportoHeight * rapporto)
            Else
                nuovaWidth = dimensioni.Width
                nuovaHeight = dimensioni.Height
            End If
            Dim nuovaImmagine As Image = New Bitmap(nuovaWidth, nuovaHeight)
            Using graphicsHandle As Graphics = Graphics.FromImage(nuovaImage)
                graphicsHandle.InterpolationMode = InterpolationMode.HighQualityBicubic
                graphicsHandle.DrawImage(image, 0, 0, nuovaWidth, nuovaHeight)
            End Using

            'Ritorno l'immagine ottenuta dal ridimensionamento
            Return nuovaImage
 
        End Function

Buona programmazione a tutti !