首頁 > 後端開發 > 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板