ホームページ > バックエンド開発 > C++ > 16 ビット/ピクセル形式を使用して画像をグレースケールに変換するにはどうすればよいですか?

16 ビット/ピクセル形式を使用して画像をグレースケールに変換するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-17 13:06:10
オリジナル
639 人が閲覧しました

How Can I Convert an Image to Grayscale Using a 16-Bit per Pixel Format?

16ビットピクセル画像のグレースケール変換方法

画像処理では、通常、グレースケール変換により、各ピクセルの赤、緑、青 (RGB) 成分が輝度値に設定されます。ただし、16 ビット/ピクセル形式を使用して画像をグレースケールに変換する方法があります。

PixelFormat コンストラクターを使用します

このメソッドを使用して画像をグレースケールに変換するには、Bitmap クラスの PixelFormat コンストラクターを使用できます。例は次のとおりです:

<code class="language-c#">Bitmap grayScaleBP = new System.Drawing.Bitmap(2, 2, System.Drawing.Imaging.PixelFormat.Format16bppGrayScale);</code>
ログイン後にコピー

これにより、2x2 ピクセルのサイズと 16 ビット/ピクセルのグレースケールのピクセル形式で新しいビットマップが作成されます。

既存の画像をグレースケールに変換します

既存の画像をグレースケールに変換するには、ループを使用してピクセルをループし、ピクセルをグレースケール カラーに設定します。例は次のとおりです:

<code class="language-c#">// 代码片段略,此处需要补充完整代码以实现灰度转换</code>
ログイン後にコピー

このコードは、ビットマップ c 内の各ピクセルを調べて、赤の成分を輝度値に設定し、緑と青の成分をゼロに設定して、効果的にグレースケールに変換します。結果として得られるビットマップ d には、元のイメージのグレースケール バージョンが含まれます。

ColorMatrix の簡単な使い方

ColorMatrix を使用してグレースケール画像を高速に変換します:

<code class="language-c#">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}
            });

        // 创建一些图像属性
        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 を使用してグレースケール変換を実行します。これは、ピクセルを手動で繰り返すよりもはるかに高速です。

以上が16 ビット/ピクセル形式を使用して画像をグレースケールに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート