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.038 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. |
sevWizard für VB5/6 Professionelle Assistenten im Handumdrehen Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
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. |