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