16位元像素影像的灰階轉換方法
影像處理中,灰階轉換通常會將每個像素的紅、綠、藍 (RGB) 分量設定為亮度值。但是,有一種方法可以使用每像素16位元的格式將影像轉換為灰階。
使用PixelFormat建構子
使用此方法將影像轉換為灰度,您可以使用Bitmap類別的PixelFormat建構子。例如下:
<code class="language-c#">Bitmap grayScaleBP = new System.Drawing.Bitmap(2, 2, System.Drawing.Imaging.PixelFormat.Format16bppGrayScale);</code>
這將建立一個新的點陣圖,大小為2x2像素,像素格式為每像素16位元的灰階。
將現有影像轉換為灰階
要將現有影像轉換為灰度,您可以使用循環遍歷像素並將它們設定為灰階顏色。例如下:
<code class="language-c#">// 代码片段略,此处需要补充完整代码以实现灰度转换</code>
這段程式碼遍歷點陣圖c中的每個像素,將紅色分量設定為亮度值,並將綠色和藍色分量設為零,從而有效地將其轉換為灰階。產生的點陣圖d包含原始影像的灰階版本。
使用ColorMatrix的快速方法
使用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>
此方法使用ColorMatrix執行灰階轉換,這比手動遍歷像素快得多。
以上是如何使用 16 位元每像素格式將影像轉換為灰階?的詳細內容。更多資訊請關注PHP中文網其他相關文章!