Mit diesem Code lässt sich ein Bild ohne Qualitätsverlust neu skalieren, wobei das Größenverhältnis beibehalten wird. Dies ist immer dann interessant, wenn man Bilder in einer PictureBox anzeigen möchte und die Bilder größer oder kleiner als die PictureBox selbst sind. Man kann die Funktion aber auch dazu nutzen, um Thumbnails (Miniaturansichten) von Bilder in einer einheitlichen Größe zu erstellen. Die Funktion erwartet im ersten Parameter das Bild-Objekt. Die beiden nachfolgenden Parameter legen die maximale Breite und Höhe des Bildes fest. Ist das Bild breiter als die maximal angegebene Breite, wird die Breite des Bildes angepasst, wobei die Höhe neu berechnet wird und umgekehrt, so dass das Größenverhältnis des Originalbildes immer gleich bleibt. Weiterhin wird das Bild bei Anpassung der Breite und/oder Höhe interpoliert, damit die Qualität erhalten bleibt. Ist das Originalbild sowohl in der Breite als auch in der Höhe kleiner als die angegebenene maximale Dimension, lässt sich über den optionalen Parameter "bStretch" festlegen, ob das Bild gestretcht werden oder in der Originalgröße dargestellt werden soll. Public Function AutoSizeImage(ByVal oBitmap As Image, _ ByVal maxWidth As Integer, _ ByVal maxHeight As Integer, _ Optional ByVal bStretch As Boolean = False) As Image ' Größenverhältnis der max. Dimension Dim maxRatio As Single = maxWidth / maxHeight ' Bildgröße und aktuelles Größenverhältnis Dim imgWidth As Integer = oBitmap.Width Dim imgHeight As Integer = oBitmap.Height Dim imgRatio As Single = imgWidth / imgHeight ' Bild anpassen? If (imgWidth > maxWidth Or imgHeight > maxHeight) Or (bStretch) Then If imgRatio <= maxRatio Then ' Größenverhältnis des Bildes ist kleiner als die ' maximale Größe, in der das Bild angezeigt werden kann. ' In diesem Fall muss die Bildbreite angepasst werden. imgWidth = imgWidth / (imgHeight / maxHeight) imgHeight = maxHeight Else ' Größenverhältnis des Bildes ist größer als die ' maximale Größe, in der das Bild angezeigt werden kann. ' In diesem Fall muss die Bildhöhe angepasst werden. imgHeight = imgHeight / (imgWidth / maxWidth) imgWidth = maxWidth End If ' Bitmap-Objekt in der neuen Größe erstellen Dim oImage As New Bitmap(imgWidth, imgHeight) ' Bild interpolieren, damit die Qualität erhalten bleibt Using g As Graphics = Graphics.FromImage(oImage) g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic g.DrawImage(oBitmap, New Rectangle(0, 0, imgWidth, imgHeight)) End Using ' neues Bitmap zurückgeben Return oImage Else ' unverändertes Originalbild zurückgeben Return oBitmap End If End Function Aufrufbeispiel: ' Bild laden Dim oStream As New System.IO.FileStream("bild.jpg", IO.FileMode.Open) Dim oBitmap As Bitmap oBitmap = New Bitmap(oStream) oStream.Close() ' Bild soll optimal an die Größe der PictureBox ' angepasst und angezeigt werden With PictureBox1 .Image = AutoSizeImage(oBitmap, .ClientRectangle.Width, .ClientRectangle.Height) End With Dieser Tipp wurde bereits 39.697 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats Januar 2025 Dieter Otter Zeilen einer MultiLine-TextBox ermitteln (VB.NET) Dieser Zipp zeigt, wie man die Zeilen einer MultiLine-TextBox exakt so ermitteln kann, wie diese auch in der TextBox dargestellt werden. Neu! sevCommand 4.0 Professionelle Schaltflächen im modernen Design! Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |