在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中文网其他相关文章!