Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menukar Imej kepada Skala Kelabu dalam C#?

Bagaimana untuk Menukar Imej kepada Skala Kelabu dalam C#?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-17 12:57:13342semak imbas

How to Convert Images to Grayscale in C#?

Penjelasan terperinci tentang penukaran skala kelabu imej C#

Menukar imej kepada format skala kelabu ialah tugas pemprosesan imej yang biasa. Artikel ini akan meneroka cara menggunakan System.Drawing.Imaging.PixelFormat penghitungan untuk melaksanakan penukaran skala kelabu dalam C#.

Format skala kelabu piksel 16-bit

Jika anda memerlukan imej skala kelabu dengan piksel 16-bit, anda boleh menggunakan pembina berikut:

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

Penukaran skala kelabu imej

Untuk menukar imej sedia ada (c) kepada imej skala kelabu (d) anda boleh menggunakan kod berikut:

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

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

(Kod penukaran skala kelabu khusus dalam badan gelung ditinggalkan di sini kerana teks asal tidak menyediakan kandungan isi gelung yang lengkap)

Kaedah penukaran skala kelabu yang lebih pantas

Berikut ialah kaedah penukaran skala kelabu imej yang lebih cekap:

<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>

Kaedah ini menggunakan ColorMatrix untuk melaksanakan penukaran skala kelabu, sekali gus meningkatkan prestasi.

Atas ialah kandungan terperinci Bagaimana untuk Menukar Imej kepada Skala Kelabu dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn