Rumah >pembangunan bahagian belakang >C++ >Bagaimana dengan Cekap Menukar Imej kepada Skala Kelabu 16-bit dalam C#?

Bagaimana dengan Cekap Menukar Imej kepada Skala Kelabu 16-bit dalam C#?

Barbara Streisand
Barbara Streisandasal
2025-01-17 13:01:10443semak imbas

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

Buat imej skala kelabu 16-bit dalam C#

Tukar imej kepada format skala kelabu 16-bit tanpa melaraskan komponen RGB satu demi satu, anda boleh terus menggunakan System.Drawing.Imaging.PixelFormat penghitungan.

Buat peta bit skala kelabu

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

Ini akan mencipta peta bit skala kelabu 16 bit kosong.

Tukar imej sedia ada

Untuk menukar imej warna sedia ada kepada skala kelabu, anda boleh melelang pada pikselnya dan menetapkan warna setiap piksel kepada skala kelabu, mengekstrak maklumat kecerahan daripada warna asal. (Contoh kod untuk traversal piksel dan penukaran skala kelabu ditinggalkan di sini kerana kod lengkap tidak disediakan dalam artikel asal, hanya kod untuk membuat peta bit.)

Pelan pengoptimuman

Untuk mempercepatkan penukaran skala kelabu, anda boleh menggunakan kelas ColorMatrix untuk menggunakan transformasi skala kelabu sebelum melukis imej asal:

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

Kaedah ini menggunakan ColorMatrix untuk menukar imej kepada skala kelabu dengan cekap.

Atas ialah kandungan terperinci Bagaimana dengan Cekap Menukar Imej kepada Skala Kelabu 16-bit 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