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   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik:    |   VB-Versionen: VB.NET01.08.07
Bild in Graustufen umwandeln (VB.NET)

Dieser Tipp zeigt, wie sich ein beliebiges Farbbild in ein Graustufen-Bild umwandeln lässt.

Autor:  Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  1.520 
http://www.tools4vb.de/System:  WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt 

Manchmal ist es notwendig ein Farbbild in Graustufen umzuwandeln. Das Ganze ist auch gar nicht schwer, wie nachfolgender Tipp zeigt. Mit Hilfe der ColorMatrix-Klasse aus dem .NET Framework werden die Umrechnungsfaktoren der Farbwerte Rot, Grün und Blau festgelegt. Anschließend wird ein ImageAtributes-Objekt erstellt, der die ColorMatrix zugewiesen wird. Beim Zeichnen des Bildes wird das ImageAttributes-Objekt dann einfach der DrawImage-Methode des Graphics-Objekt übergeben - et voilá: aus einem Farbbild wird ein Graustufenbild.

Public Function DoGrayScale(ByVal oImage As Image) As Image
  ' Graustufen - ColorMatrix 
  Dim oMatrix As New Imaging.ColorMatrix(New Single()() { _
    New Single() {0.3, 0.3, 0.3, 0, 0}, _
    New Single() {0.6, 0.6, 0.6, 0, 0}, _
    New Single() {0.1, 0.1, 0.1, 0, 0}, _
    New Single() {0, 0, 0, 1, 0}, _
    New Single() {0, 0, 0, 0, 1}})
 
  ' ImageAttribute-Objekt mit Graustufen-ColorMatrix erstellen
  Dim oAttr As New Imaging.ImageAttributes()
  oAttr.SetColorMatrix(oMatrix)
 
  ' Neue Bitmap-Objekt erstellen
  Dim imgWidth As Integer = oImage.Width
  Dim imgHeight As Integer = oImage.Height
  Dim oGrayImage As Image = Image.FromHbitmap( _
    New Bitmap(imgWidth, imgHeight).GetHbitmap)
 
  ' Bild unter Berücksichtigung des ImageAttributes-Objekts
  ' mit Farb-Konvertierung neu erstellen
  Using g As Graphics = Graphics.FromImage(oGrayImage)
    g.DrawImage(oImage, New Rectangle(0, 0, imgWidth, imgHeight), _
        0, 0, imgWidth, imgHeight, GraphicsUnit.Pixel, oAttr)
  End Using
 
  ' neues Bild zurückgeben
  Return oGrayImage
End Function

Aufrufbeispiel:
In der PictureBox1 soll das Original-Farbbild angezeigt werden, in der PictureBox2 das entsprechende Garustufenbild.

' Original-Farbbild
PictureBox1.Image = Image.FromFile("bild.gif")
 
' Graustufenbild
PictureBox2.Image = DoGrayScale(PictureBox1.Image)