Heim > Backend-Entwicklung > C++ > Wie konvertiert man Bilder in C# effizient in 16-Bit-Graustufen?

Wie konvertiert man Bilder in C# effizient in 16-Bit-Graustufen?

Barbara Streisand
Freigeben: 2025-01-17 13:01:10
Original
396 Leute haben es durchsucht

How to Efficiently Convert Images to 16-bit Grayscale in C#?

Erstellen Sie ein 16-Bit-Graustufenbild in C#

Konvertieren Sie das Bild in das 16-Bit-Graustufenformat, ohne die RGB-Komponenten einzeln anzupassen. Sie können die Aufzählung System.Drawing.Imaging.PixelFormat direkt verwenden.

Graustufen-Bitmap erstellen

<code class="language-csharp">Bitmap grayScaleBP = new System.Drawing.Bitmap(2, 2, System.Drawing.Imaging.PixelFormat.Format16bppGrayScale);</code>
Nach dem Login kopieren

Dadurch wird eine leere 16-Bit-Graustufen-Bitmap erstellt.

Vorhandenes Bild konvertieren

Um ein vorhandenes Farbbild in Graustufen umzuwandeln, können Sie über seine Pixel iterieren und die Farbe jedes Pixels auf Graustufen einstellen, wodurch die Helligkeitsinformationen aus der Originalfarbe extrahiert werden. (Codebeispiele für Pixeldurchquerung und Graustufenkonvertierung werden hier weggelassen, da im Originalartikel nicht der vollständige Code enthalten ist, sondern nur der Code zum Erstellen der Bitmap.)

Optimierungsplan

Um die Graustufenkonvertierung zu beschleunigen, können Sie mit der Klasse ColorMatrix eine Graustufentransformation anwenden, bevor Sie das Originalbild zeichnen:

<code class="language-csharp">public static Bitmap MakeGrayscale3(Bitmap original)
{
    Bitmap newBitmap = new Bitmap(original.Width, original.Height);
    using (Graphics g = Graphics.FromImage(newBitmap))
    {
        ColorMatrix colorMatrix = new ColorMatrix(
            new float[][] 
            {
                new float[] {.3f, .3f, .3f, 0, 0},
                new float[] {.59f, .59f, .59f, 0, 0},
                new float[] {.11f, .11f, .11f, 0, 0},
                new float[] {0, 0, 0, 1, 0},
                new float[] {0, 0, 0, 0, 1}
            });

        using (ImageAttributes attributes = new ImageAttributes())
        {
            attributes.SetColorMatrix(colorMatrix);

            g.DrawImage(original, new Rectangle(0, 0, original.Width, original.Height),
                        0, 0, original.Width, original.Height, GraphicsUnit.Pixel, attributes);
        }
    }
    return newBitmap;
}</code>
Nach dem Login kopieren

Diese Methode nutzt ColorMatrix, um Bilder effizient in Graustufen zu konvertieren.

Das obige ist der detaillierte Inhalt vonWie konvertiert man Bilder in C# effizient in 16-Bit-Graustufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage