Συχνά φτιάχνοντας κάποια asp.net εφαρμογή χρειάζεται να παρουσιάσουμε εικόνες, ιδιαίτερα σε λίστες όπως datalist, listview, repeater, κ.λ.π...
Το πρόβλημα με αυτό το σενάριο είναι ότι κάποιες εικόνες είναι "οριζόντιες", άλλες "κάθετες" και γενικώς συμβαίνει να έχουμε διάφορες διαστάσεις και aspect ratios.
Σας δείχνω μια μέθδο, που κάνει βασική χρήση GDI+, για να παρουσιάζετε την εικόνα στα πλαίσια ενός τετραγώνου, που το μέγεθος της πλευράς του δίνεται στη μία παράμετρο της μεθόδου. Η άλλη παράμετρος είναι η εικόνα.
Έτσι αν η εικόνα είναι "κάθετη" ή "οριζόντια", πάντα η μεγαλύτερη πλευρά της θα είναι ίση με την πλευρά του τετραγώνου, δίνοντας στην παρουσίαση της σελίδας ομοιομορφία.
Χωρίς παραπάνω λόγια...
Το πρόβλημα με αυτό το σενάριο είναι ότι κάποιες εικόνες είναι "οριζόντιες", άλλες "κάθετες" και γενικώς συμβαίνει να έχουμε διάφορες διαστάσεις και aspect ratios.
Σας δείχνω μια μέθδο, που κάνει βασική χρήση GDI+, για να παρουσιάζετε την εικόνα στα πλαίσια ενός τετραγώνου, που το μέγεθος της πλευράς του δίνεται στη μία παράμετρο της μεθόδου. Η άλλη παράμετρος είναι η εικόνα.
Έτσι αν η εικόνα είναι "κάθετη" ή "οριζόντια", πάντα η μεγαλύτερη πλευρά της θα είναι ίση με την πλευρά του τετραγώνου, δίνοντας στην παρουσίαση της σελίδας ομοιομορφία.
Χωρίς παραπάνω λόγια...
Public Shared Function ResizeInRectangle( _ ByVal originalImage As Image, _ ByVal newWidth As Integer) As 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