vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2018
 
zurück
Rubrik: Grafik und Font · Grafische Effekte   |   VB-Versionen: VB2005, VB200809.10.08
Rahmen um Grafik zeichnen

Ein Rahmen um eine Grafik zu zeichnen kann oft sinnvoll sein, um diese etwas hervorzuheben.

Autor:   Jan GräfenBewertung:     [ Jetzt bewerten ]Views:  11.676 
ohne HomepageSystem:  Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

Vor Kurzem habe ich ein Programm geschrieben, in dem man unter anderem Bilder importieren konnte. Nun sieht es natürlich schöner aus, wenn man diese Bilder mit einer Kontur versieht. VB bietet dazu zwei Möglichkeiten:

  1. Die Verwendung einer Picturebox mit entsprechenden Borderstyle
  2. Die Kontur direkt auf die Grafik zu zeichnen

Die erste Variante funktioniert klasse, wenn die Grafiken immer die selbe Höhe und Breite haben und sich somit exat in eine Picturebox skalieren lassen.

Problematisch wird es aber dann, wenn die Seitenverhältnisse variieren, man das Bild aber nicht verzerren will, sprich die Seitenverhältnisse beibehalten möchte. Hier bietet es sich also an den Rahmen der Picturebox zu deaktivieren und selbst Hand anzulegen.

Dazu habe ich folgende Funktion geschrieben:

Public Function RahmenZeichnen(ByVal Grafik As Image) As Image
  Dim bmp As System.Drawing.Bitmap = Grafik
  Dim a As Integer
  Dim b As Integer
  Dim c As Integer
  Dim d As Integer
 
  ' weißen Rahmen zeichnen
  For a = 0 To Grafik.Width - 1
    bmp.SetPixel(a, 1, Color.White)
    bmp.SetPixel(a, Grafik.Height - 2, Color.White)
  Next a
 
  For b = 0 To Grafik.Height - 1
    bmp.SetPixel(1, b, Color.White)
    bmp.SetPixel(Grafik.Width - 2, b, Color.White)
  Next b
 
  ' schwarzen Rahmen zeichnen
  For c = 0 To Grafik.Width - 1
    bmp.SetPixel(c, 0, Color.Black)
    bmp.SetPixel(c, Grafik.Height - 1, Color.Black)
  Next c
 
  For d = 0 To Grafik.Height - 1
    bmp.SetPixel(0, d, Color.Black)
    bmp.SetPixel(Grafik.Width - 1, d, Color.Black)
  Next d
 
  ' Grafik ausgeben
  Return bmp
End Function

Anwendungsbeispiel:

RahmenZeichnen(PictureBox1.Image)
PictureBox1.Refresh()

Erweiterung des Tipps von Dieter Otter
Erstellt man ein Graphics-Objekt der übergebenen Grafik lässt sich der Rahmen schneller über die Methode "DrawRectangle" zeichnen. Weiterhin könnte man die Funktion durch Überladung um zwei weitere Parameter erweitern, in denen man die Farbe des Rahmens individuell festlegen kann:

''' <summary>
''' Zeichnet einen schwarz/weißen Rahmen um ein Image-Objekt
''' </summary>
''' <param name="Grafik">Originalgrafik</param>
''' <returns>Neues Image-Objekt mit Rahmen</returns>
Public Function RahmenZeichnen(ByVal Grafik As Image) As Image
  ' Standardfarben weiß und schwarz verwenden
  Return RahmenZeichnen(Grafik, Color.White, Color.Black)
End Function
''' <summary>
''' Zeichnet einen Rahmen in den angegebenen Farben um ein Image-Objekt
''' </summary>
''' <param name="Grafik">Originalgrafik</param>
''' <param name="innerColor">innere Rahmenfarbe</param>
''' <param name="outerColor">äußere Rahmenfarbe</param>
''' <returns>Neues Image-Objekt mit Rahmen</returns>
Public Function RahmenZeichnen(ByVal Grafik As Image, _
  ByVal innerColor As Color, _
  ByVal outerColor As Color) As Image
 
  ' Neus Bitmap-Objekt aus übergebener Grafik
  Dim bmp As New System.Drawing.Bitmap(Grafik)
 
  Using g As Graphics = Graphics.FromImage(bmp)
    ' weißen Rahmen zeichnen
    Dim r As New Rectangle(1, 1, Grafik.Width - 3, Grafik.Height - 3)
    g.DrawRectangle(New Pen(innerColor), r)
 
    ' schwarzen Rahmen zeichnen
    r = New Rectangle(0, 0, Grafik.Width - 1, Grafik.Height - 1)
    g.DrawRectangle(New Pen(outerColor), r)
  End Using
 
  ' neue Grafik zurückgeben
  Return bmp
End Function

Obige Funktionen verändert nicht das Originalbild, sondern erstellen ein neues Image-Objekt mit Rahmen.

Anwendungsbeispiel:

' Standard-Rahmenfarbe schwarz/weiß
PictureBox1.Image = RahmenZeichnen(PictureBox1.Image)
' benutzerdefinierte Farben für den Rahmen verwenden
PictureBox1.Image = RahmenZeichnen(PictureBox1.Image, Color.White, Color.Red)

Dieser Tipp wurde bereits 11.676 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Aktuelle Diskussion anzeigen (5 Beiträge)

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2018 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel