Heim > Backend-Entwicklung > C++ > Wie kann ich ein Bild mit einem 16-Bit-pro-Pixel-Format in Graustufen konvertieren?

Wie kann ich ein Bild mit einem 16-Bit-pro-Pixel-Format in Graustufen konvertieren?

Susan Sarandon
Freigeben: 2025-01-17 13:06:10
Original
639 Leute haben es durchsucht

How Can I Convert an Image to Grayscale Using a 16-Bit per Pixel Format?

Graustufenkonvertierungsmethode für 16-Bit-Pixelbilder

Bei der Bildverarbeitung setzt die Graustufenkonvertierung normalerweise die Rot-, Grün- und Blauanteile (RGB) jedes Pixels auf einen Helligkeitswert. Es gibt jedoch eine Möglichkeit, ein Bild mithilfe eines 16-Bit-pro-Pixel-Formats in Graustufen umzuwandeln.

Verwenden Sie den PixelFormat-Konstruktor

Um ein Bild mit dieser Methode in Graustufen zu konvertieren, können Sie den PixelFormat-Konstruktor der Bitmap-Klasse verwenden. Ein Beispiel ist wie folgt:

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

Dadurch wird eine neue Bitmap mit einer Größe von 2x2 Pixeln und einem Pixelformat von 16 Bit pro Pixel Graustufen erstellt.

Vorhandenes Bild in Graustufen konvertieren

Um ein vorhandenes Bild in Graustufen umzuwandeln, können Sie eine Schleife verwenden, um die Pixel zu durchlaufen und sie auf eine Graustufenfarbe festzulegen. Ein Beispiel ist wie folgt:

<code class="language-c#">// 代码片段略,此处需要补充完整代码以实现灰度转换</code>
Nach dem Login kopieren

Dieser Code durchläuft jedes Pixel in der Bitmap c und setzt die Rotkomponente auf den Helligkeitswert und die Grün- und Blaukomponenten auf Null, wodurch sie effektiv in Graustufen umgewandelt wird. Die resultierende Bitmap d enthält eine Graustufenversion des Originalbilds.

Schnelle Möglichkeit, ColorMatrix zu verwenden

Graustufenbilder schneller konvertieren mit ColorMatrix:

<code class="language-c#">public static Bitmap MakeGrayscale3(Bitmap original)
{
    // 创建一个与原始图像大小相同的空白位图
    Bitmap newBitmap = new Bitmap(original.Width, original.Height);

    // 从新图像获取图形对象
    using (Graphics g = Graphics.FromImage(newBitmap)) {
        // 创建灰度ColorMatrix
        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 verwendet eine ColorMatrix, um eine Graustufenkonvertierung durchzuführen, die viel schneller ist als die manuelle Iteration durch die Pixel.

Das obige ist der detaillierte Inhalt vonWie kann ich ein Bild mit einem 16-Bit-pro-Pixel-Format in Graustufen konvertieren?. 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