C# で 16 ビット グレースケール イメージを作成する
RGB コンポーネントを 1 つずつ調整せずに画像を 16 ビット グレースケール形式に変換します。System.Drawing.Imaging.PixelFormat
列挙体を直接使用できます。
グレースケール ビットマップの作成
<code class="language-csharp">Bitmap grayScaleBP = new System.Drawing.Bitmap(2, 2, System.Drawing.Imaging.PixelFormat.Format16bppGrayScale);</code>
これにより、空の 16 ビット グレースケール ビットマップが作成されます。
既存の画像を変換
既存のカラー画像をグレースケールに変換するには、ピクセルを反復処理して各ピクセルの色をグレースケールに設定し、元の色から明るさの情報を抽出します。 (元の記事では完全なコードが提供されておらず、ビットマップを作成するコードのみが提供されているため、ピクセル トラバーサルとグレースケール変換のコード例はここでは省略されています。)
最適化計画
グレースケール変換を高速化するには、ColorMatrix
クラスを使用して、元の画像を描画する前にグレースケール変換を適用できます。
<code class="language-csharp">public static Bitmap MakeGrayscale3(Bitmap original) { Bitmap newBitmap = new Bitmap(original.Width, original.Height); using (Graphics g = Graphics.FromImage(newBitmap)) { 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
を利用して画像を効率的にグレースケールに変換します。
以上がC# で画像を 16 ビット グレースケールに効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。