在C#中建立16位元灰階影像
將影像轉換為16位元灰階格式,無需逐一調整RGB分量,可以直接使用System.Drawing.Imaging.PixelFormat
枚舉。
建立灰階位圖
<code class="language-csharp">Bitmap grayScaleBP = new System.Drawing.Bitmap(2, 2, System.Drawing.Imaging.PixelFormat.Format16bppGrayScale);</code>
這將建立一個空的16位元灰階點陣圖。
轉換現有影像
要將現有的彩色影像轉換為灰階影像,可以遍歷其像素,並將每個像素的顏色設為灰度,從原始顏色中提取亮度資訊。 (此處省略了像素遍歷和灰階轉換的程式碼範例,因為原文中並未提供完整的程式碼,只提供了建立點陣圖的程式碼。)
最佳化方案
為了加快灰階轉換速度,可以使用ColorMatrix
類別在繪製原始影像之前應用灰階變換:
<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>
此方法利用ColorMatrix
有效率地將影像轉換為灰階。
以上是如何在C#中高效率地將影像轉換為16位元灰階?的詳細內容。更多資訊請關注PHP中文網其他相關文章!