首页 > 后端开发 > C++ > 如何在C#中高效地将图像转换为16位灰度?

如何在C#中高效地将图像转换为16位灰度?

Barbara Streisand
发布: 2025-01-17 13:01:10
原创
396 人浏览过

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

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板