Αλλαγή μεγέθους εικόνας σε συγκεκριμένο τετράγωνο

Συχνά φτιάχνοντας κάποια asp.net εφαρμογή χρειάζεται να παρουσιάσουμε εικόνες, ιδιαίτερα σε λίστες όπως datalist, listview, repeater, κ.λ.π...

Το πρόβλημα με  αυτό το σενάριο είναι ότι κάποιες εικόνες είναι "οριζόντιες", άλλες "κάθετες" και γενικώς συμβαίνει να έχουμε διάφορες διαστάσεις και aspect ratios.

Σας δείχνω μια μέθδο, που κάνει βασική χρήση GDI+, για να παρουσιάζετε την εικόνα στα πλαίσια ενός τετραγώνου, που το μέγεθος της πλευράς του δίνεται στη μία παράμετρο της μεθόδου. Η άλλη παράμετρος είναι η εικόνα.

Έτσι αν η εικόνα είναι "κάθετη" ή "οριζόντια", πάντα η μεγαλύτερη πλευρά της θα είναι ίση με την πλευρά του τετραγώνου, δίνοντας στην παρουσίαση της σελίδας ομοιομορφία.

Χωρίς παραπάνω λόγια...

    Public Shared Function ResizeInRectangle( _
                  ByVal originalImage As Image, _
                  ByVal newWidth As IntegerAs Image
 
        Dim WidthVsHeightRatio = _
            CDec(originalImage.Width / originalImage.Height)
        Dim newBitmap As Bitmap = _
            New Bitmap(newWidth, newWidth)
 
        Using newg As Graphics = _
            Graphics.FromImage(newBitmap)
 
            newg.InterpolationMode = _
                Drawing2D.InterpolationMode.HighQualityBicubic
 
            newg.Clear(Color.Transparent)
 
            If WidthVsHeightRatio = 1D Then
 
                newg.DrawImage(originalImage, 0, 0, newWidth, newWidth)
 
                newg.Save()
 
            ElseIf WidthVsHeightRatio < 1D Then 'Image is taller than wider
 
                newg.DrawImage(originalImage, _
                               New RectangleF( _
                                   New PointF(CSng(((newWidth / 2) - _
                                             (newWidth * WidthVsHeightRatio) / 2)), 0), _
                                   New SizeF(newWidth * WidthVsHeightRatio, newWidth)))
                newg.Save()
 
            Else 'Image is wider than taller
 
                Dim inverse As Double = _
                    Math.Pow(WidthVsHeightRatio, -1)
                newg.DrawImage(originalImage, _
                               New RectangleF( _
                               New PointF(0, CSng((newWidth / 2) - _
                                          ((newWidth * inverse) / 2))), _
                               New SizeF(newWidth, CSng(newWidth * inverse))))
                newg.Save()
 
            End If
 
        End Using
        Return newBitmap
    End Function

Comments

No responses to “Αλλαγή μεγέθους εικόνας σε συγκεκριμένο τετράγωνο”

Post a Comment