Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0064: Farbsättigung eines Bildes ändern

 von 

Beschreibung

Dieses Beispiel zeigt wie per ColorMatrix die Farbsättigung (Saturation) eines Bildes verändert werden kann.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

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:

Download des Beispielprojektes [48,2 KB]

' 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.