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>
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>
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>
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!