Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menukar Imej kepada Skala Kelabu Menggunakan Format 16-Bit setiap Piksel?

Bagaimanakah Saya Boleh Menukar Imej kepada Skala Kelabu Menggunakan Format 16-Bit setiap Piksel?

Susan Sarandon
Lepaskan: 2025-01-17 13:06:10
asal
639 orang telah melayarinya

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

Kaedah penukaran skala kelabu untuk imej piksel 16-bit

Dalam pemprosesan imej, penukaran skala kelabu biasanya menetapkan komponen merah, hijau dan biru (RGB) bagi setiap piksel kepada nilai kecerahan. Walau bagaimanapun, terdapat cara untuk menukar imej kepada skala kelabu menggunakan format 16-bit setiap piksel.

Gunakan pembina PixelFormat

Untuk menukar imej kepada skala kelabu menggunakan kaedah ini, anda boleh menggunakan pembina PixelFormat bagi kelas Bitmap. Contohnya adalah seperti berikut:

<code class="language-c#">Bitmap grayScaleBP = new System.Drawing.Bitmap(2, 2, System.Drawing.Imaging.PixelFormat.Format16bppGrayScale);</code>
Salin selepas log masuk

Ini akan mencipta peta bit baharu dengan saiz 2x2 piksel dan format piksel 16 bit setiap skala kelabu piksel.

Tukar imej sedia ada kepada skala kelabu

Untuk menukar imej sedia ada kepada skala kelabu, anda boleh menggunakan gelung untuk menggelung melalui piksel dan menetapkannya kepada warna skala kelabu. Contohnya adalah seperti berikut:

<code class="language-c#">// 代码片段略,此处需要补充完整代码以实现灰度转换</code>
Salin selepas log masuk

Kod ini melalui setiap piksel dalam bitmap c dan menetapkan komponen merah kepada nilai kecerahan dan komponen hijau dan biru kepada sifar, dengan berkesan menukarnya kepada skala kelabu. Peta bit d yang terhasil mengandungi versi skala kelabu bagi imej asal.

Cara cepat untuk menggunakan ColorMatrix

Tukar imej skala kelabu dengan lebih pantas menggunakan 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>
Salin selepas log masuk

Kaedah ini menggunakan ColorMatrix untuk melakukan penukaran skala kelabu, yang jauh lebih pantas daripada melelaran secara manual melalui piksel.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Imej kepada Skala Kelabu Menggunakan Format 16-Bit setiap Piksel?. 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