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 中国語 Web サイトの他の関連記事を参照してください。