16 ビット グレースケール画像変換テクニック
このガイドでは、RGB コンポーネントを輝度値に手動で調整せずに、画像を 16 ビット グレースケール形式に変換する方法について説明します。
新しい 16 ビット グレースケール ビットマップの作成:
最も簡単な方法では、System.Drawing.Bitmap
コンストラクターを System.Drawing.Imaging.PixelFormat
パラメーターとともに使用します。 これにより、目的の 16 ビット グレースケール形式で新しいビットマップが直接作成されます:
<code class="language-csharp">Bitmap grayScaleBP = new System.Drawing.Bitmap(2, 2, System.Drawing.Imaging.PixelFormat.Format16bppGrayScale);</code>
このコード スニペットは、16 ビット グレースケールで 2x2 ピクセルのビットマップを生成します。 画像の必要に応じて寸法を調整します。
既存の画像を 16 ビット グレースケールに変換する:
既存のビットマップを変換するには、各ピクセルを反復処理し、その色のプロパティを再定義する必要があります。この方法は可能ですが、画像が大きい場合は効率が低くなります。
<code class="language-csharp">// (Pixel iteration code would go here – omitted for brevity due to inefficiency)</code>
ColorMatrix を使用した最適化されたグレースケール変換:
グレースケール変換を大幅に高速かつ効率的に行うには、ColorMatrix
を利用します。このアプローチでは、変換行列を画像のカラー データに適用し、グレースケール変換を行います。
<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>
これは、知覚的に正確なグレースケール変換のために標準の輝度重み付け (.3、.59、.11) を利用します。 変更された ImageAttributes
を使用して画像を描画するには、コメントされたセクションを適切なコードに置き換えることを忘れないでください。 この方法は、特に大きな画像の場合、ピクセルごとの操作よりもはるかに効率的です。
以上が画像を 16 ビット グレースケールに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。