Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menukar Imej kepada Skala Kelabu 16-Bit?

Bagaimana untuk Menukar Imej kepada Skala Kelabu 16-Bit?

Barbara Streisand
Lepaskan: 2025-01-17 12:52:10
asal
306 orang telah melayarinya

How to Convert an Image to 16-Bit Grayscale?

Teknik Penukaran Imej Skala Kelabu 16-bit

Panduan ini menerangkan cara menukar imej kepada format skala kelabu 16-bit tanpa melaraskan komponen RGB secara manual kepada nilai kecerahan.

Mencipta Peta Bit Skala Kelabu 16-bit Baharu:

Kaedah paling mudah melibatkan penggunaan System.Drawing.Bitmap pembina dengan parameter System.Drawing.Imaging.PixelFormat. Ini terus mencipta peta bit baharu dengan format skala kelabu 16-bit yang dikehendaki:

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

Coretan kod ini menghasilkan peta bit 2x2 piksel dalam skala kelabu 16 bit. Laraskan dimensi mengikut keperluan untuk imej anda.

Menukar Imej Sedia Ada kepada Skala Kelabu 16-bit:

Untuk menukar peta bit sedia ada, anda perlu mengulangi setiap piksel dan mentakrifkan semula sifat warnanya. Walaupun boleh, kaedah ini kurang cekap untuk imej yang lebih besar.

<code class="language-csharp">// (Pixel iteration code would go here – omitted for brevity due to inefficiency)</code>
Salin selepas log masuk

Penukaran Skala Kelabu Dioptimumkan menggunakan ColorMatrix:

Untuk penukaran skala kelabu yang jauh lebih pantas dan cekap, manfaatkan ColorMatrix. Pendekatan ini menggunakan matriks transformasi pada data warna imej, menghasilkan penukaran skala kelabu.

<code class="language-csharp">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);
    // ... (Drawing code using attributes to apply the ColorMatrix) ...
}</code>
Salin selepas log masuk

Ini menggunakan pemberat pencahayaan standard (.3, .59, .11) untuk penukaran skala kelabu yang tepat secara persepsi. Ingat untuk menggantikan bahagian komen dengan kod yang sesuai untuk melukis imej menggunakan ImageAttributes yang diubah suai. Kaedah ini jauh lebih cekap daripada manipulasi piksel demi piksel, terutamanya untuk imej yang lebih besar.

Atas ialah kandungan terperinci Bagaimana untuk Menukar Imej kepada Skala Kelabu 16-Bit?. 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