[C#] Bild performant in Graustufen -/ Schwarzweiss Bild umwandeln mittels ColorMatrix

Drucken
( 0 Votes ) 
Hauptkategorie: Programmieren Kategorie: C#
Erstellt am 06.06.2012 Zuletzt aktualisiert am 06.06.2012 Geschrieben von Jonny132
Mit gängigen Grafikprogrammen ist es ein einfaches ein Bild in ein Graustufenbild bzw in ein Schwarzweissbild umzuwandeln. In diesem Tutorial zeige ich euch wie man sehr schnell ein Bild auch programmiertechnisch mit C# in ein Graustufenbild umwandeln kann.

Hierbei verwenden wir die ColorMatrix - Klasse welche einfach anhand einer übergebenen Matrix das Bild umwandelt.

Funktion zur Umwandlung eines Bildes in ein Schwarzweiss Bild:
    private void DrawBitmapBlackWhite(Image image, Graphics g, Rectangle bounds)
    {
        ImageAttributes imageAttributes = new ImageAttributes();
 
        float[][] colorMatrixElements = { 
                new float[] { 0.3f, 0.3f, 0.3f, 0, 0 }, 
                new float[] { 0.6f, 0.6f, 0.6f, 0, 0 }, 
                new float[] { 0.1f, 0.1f, 0.1f, 0, 0 }, 
                new float[] { 0, 0, 0, 1, 0 }, 
                new float[] { 0, 0, 0, 0, 1 } 
        };

        ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);

        imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);

        g.DrawImage(image, bounds, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, imageAttributes);
    }
Die Funktion übernimmt, das umzuwandelnde Bild, ein Graphics Objekt welches wir zum zeichnen verwenden und ein Rectangle welche die Position und Größe des zu zeichnenden Graustufenbildes beinhaltet.

Zuerst erstellen wir die ImageAttributes, welche wir benötigen, um die Farbmatrix zu setzen.
Danach definieren wir die Matrix mittels 2-Dimensionalen Array, welche wir darauffolgend in ein ColorMatrix - Objekt übergeben.
Dieses wird wiederrum in die Bildeigenschaften (ImageAttributes) gesetzt.

Anschliessend wird das Schwarzweiss Bild per DrawImage auf der übergebenen Fläche gezeichnet.

Aufruf der Funktion:
    void Form1_Paint(object sender, PaintEventArgs e)
    {
        Image img = Image.FromFile(@"C:\pfadzumbild\test.jpg");
        e.Graphics.DrawImage(img, 0, 0, 250, 250);
        DrawBitmapBlackWhite(img, e.Graphics,new Rectangle(250, 0, 250, 250));
    }
In diesem Beispiel verwenden wir das Paint - Event der Form.
Zuerst erstellen wir ein Image - Objekt von dem Bild, welches wir umwandeln wollen.
Dann zeichnen wir das Originalbild zur veranschaulichung auf die Form und rufen unsere zuvor erstellte Funktion auf.

Graustufenbild mit C#

    Veröffentlichen Sie ihre Kommentare ...