VB.NET-Tipp 0064: Farbsättigung eines Bildes ändern
von Frank Schüler
Beschreibung
Dieses Beispiel zeigt wie per ColorMatrix die Farbsättigung (Saturation) eines Bildes verändert werden kann.
Schwierigkeitsgrad: | Framework-Version(en): .NET Framework 1.0, .NET Framework 1.1, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5 | .NET-Version(en): Visual Basic 2005, Visual Basic 2008 | Download: |
' Dieser Quellcode stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' Projektversion: Visual Studio 2005 ' Option Strict: An ' ' Referenzen: ' - System ' - System.Data ' - System.Deployment ' - System.Drawing ' - System.Windows.Forms ' - System.Xml ' ' Imports: ' - Microsoft.VisualBasic ' - System ' - System.Collections ' - System.Collections.Generic ' - System.Data ' - System.Drawing ' - System.Diagnostics ' - System.Windows.Forms ' ' ############################################################################## ' ################################# Form1.vb ################################### ' ############################################################################## Option Strict On Option Explicit On Imports System.Drawing Imports System.Drawing.Imaging Public Class Form1 ''' <summary> ''' Farbsättigung eines Bitmaps ändern ''' </summary> ''' <param name="InBitmap">Bitmap-Objekt</param> ''' <param name="Saturation">Saturation (0 bis 100) 50 = Normal</param> ''' <returns>Bitmap-Objekt</returns> Private Function SetSaturation(ByVal InBitmap As Bitmap, _ Optional ByVal Saturation As Single = 50) As Bitmap ' Min/Max If Saturation < 0 Then Saturation = 0 If Saturation > 100 Then Saturation = 100 Saturation = Saturation / 50 Dim Inv As Single = 1 - Saturation Dim Red As Single = CSng(0.3 * Inv) Dim Green As Single = CSng(0.59 * Inv) Dim Blue As Single = CSng(0.11 * Inv) ' ColorMatrix erstellen Dim Matrix As New Imaging.ColorMatrix(New Single()() _ {New Single() {Red + Saturation, Red, Red, 0, 0}, _ New Single() {Green, Green + Saturation, Green, 0, 0}, _ New Single() {Blue, Blue, Blue + Saturation, 0, 0}, _ New Single() {0, 0, 0, 1, 0}, _ New Single() {0, 0, 0, 0, 1}}) ' neue Bitmap erstellen Dim NewBmp As New Bitmap(InBitmap.Width, InBitmap.Height, _ Drawing.Imaging.PixelFormat.Format24bppRgb) ' ImageAttribute-Objekt erstellen Using ImageAttr As New Imaging.ImageAttributes() ' ColorMatrix für das ImageAttribute-Objekt setzen ImageAttr.SetColorMatrix(Matrix) ' Graphics-Objekt von NewBmp erstellen Using NewBmpGra As Graphics = Graphics.FromImage(NewBmp) ' InBitmap in das Graphics-Objekt zeichnen NewBmpGra.DrawImage(InBitmap, New Rectangle(0, 0, _ InBitmap.Width, InBitmap.Height), 0, 0, _ InBitmap.Width, InBitmap.Height, _ GraphicsUnit.Pixel, ImageAttr) 'Graphics-Objekt löschen End Using ' ImageAttribute-Objekt löschen End Using Return NewBmp End Function Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load ' Bild aus der Ressource laden und anzeigen PictureBox1.Image = My.Resources.City005 PictureBox2.Image = My.Resources.City005 End Sub Private Sub HScrollBar1_Scroll( _ ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.ScrollEventArgs) _ Handles HScrollBar1.Scroll ' ist ein Bild in der PictureBox vorhanden If Not PictureBox2.Image Is Nothing Then ' Bild löschen PictureBox2.Image.Dispose() End If PictureBox2.Image = SetSaturation( _ CType(PictureBox1.Image, Bitmap), HScrollBar1.Value) End Sub End Class
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.