ホームページ >バックエンド開発 >C++ >C# で画像をグレースケールに変換するには?

C# で画像をグレースケールに変換するには?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-17 12:57:13306ブラウズ

How to Convert Images to Grayscale in C#?

C# 画像のグレースケール変換の詳しい説明

画像をグレースケール形式に変換することは、一般的な画像処理タスクです。この記事では、System.Drawing.Imaging.PixelFormat 列挙体を使用して C# でグレースケール変換を実装する方法を説明します。

16 ビット ピクセル グレースケール形式

16 ビット ピクセルのグレースケール画像が必要な場合は、次のコンストラクターを使用できます:

<code class="language-csharp">Bitmap grayScaleBP = new System.Drawing.Bitmap(2, 2, System.Drawing.Imaging.PixelFormat.Format16bppGrayScale);</code>

画像のグレースケール変換

既存の画像 (c) をグレースケール画像 (d) に変換するには、次のコードを使用できます:

<code class="language-csharp">Bitmap d;
int x, y;

// 循环遍历图像像素并将其颜色重置为灰度
for (x = 0; x < ...; x++) {
    for (y = 0; y < ...; y++) {
        // 灰度转换逻辑...
    }
}</code>

(元のテキストではループ本体の完全な内容が提供されていないため、ループ本体内の特定のグレースケール変換コードはここでは省略されています)

より高速なグレースケール変換方法

次は、画像のグレースケール変換のより効率的な方法です:

<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 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}
            });

        // 使用灰度ColorMatrix绘制原始图像
        g.DrawImage(original, new Rectangle(0, 0, original.Width, original.Height),
                    0, 0, original.Width, original.Height, GraphicsUnit.Pixel,
                    new ImageAttributes { ColorMatrix = colorMatrix });
    }

    return newBitmap;
}</code>

このメソッドは ColorMatrix を使用してグレースケール変換を実行するため、パフォーマンスが向上します。

以上がC# で画像をグレースケールに変換するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。