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
Lepaskan: 2025-01-17 13:01:10
asal
396 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan