2009-05-21 7 views
1

GDI +を使用して.NETで現実的なハイライター(実際の蛍光ペンをシミュレート)を作成するにはどうすればよいですか?これは、選択可能なテキストではなくグラフィックスオブジェクト上で使用されることを意図しています。.NET(GDI +を使用)で現実的なハイライターを作成する最も良い方法は何ですか?

透明ブラシ(アルファチャンネル付き)を使用すると、ブラシで覆われた領域の下のすべてが「ファジー」になり、「前景」(主にテキスト)をクリアしておきたいそれは色です)。

背景領域のみにColorMapを使用すると、背景領域と特定の閾値を決定するために多くのコードが必要になります(最初のピクセルまたは右上のピクセルなどの背景を選択できます)。

エリアをカラー化するColorMatrixもオプションのようですが、私は透明ブラシソリューションと同じ問題を抱えています(私はColorMatricesの専門家ではないので、何かを見落とすかもしれません)。

私は、フォアグラウンドとバックグラウンドの両方の色にダイナミックなしきい値が必要だと思いますが、これはハイライターの使い勝手を低下させる可能性があります。

"選択された"領域またはブラシのような解決策の両方を解決するソリューションとして共存することができました。

答えて

1

黄色highligherは、黄色の光パスをすることができます。

これは、赤色と緑色を通過させ、青色をブロックさせることを意味します。

私たちは、チャンネル上の蛍光ペン(MicrosoftのSnipping Toolを)の効果を確認するためにサンプル画像を使用することができます。

オリジナル画像

enter image description here

を強調した:

enter image description here

カラーチャンネル

enter image description here

だから、あなたはあなたのハイライトを表示したい場所にゼロにblue値を設定されて何をする必要がありますか。

ブレンドモード、画像属性、またはカラーマトリックスはなく、の色成分のみを描画するために使用できます。 GDI +でそれを達成する唯一の方法は、LockBitsを使用することです。

+1

ありがとうございます! 'LockBits'を使用してRGB値を「下に」操作すると、カーソルがトリックを行います。 – barry

0

私は、画面の領域を横切ってドラッグすると、その下のセクションをつかみ、それを分析して、テキスト以外の色を黄色に設定し、テキストの色だけを残して、一定の幅と高さのブラシその後、更新されたセクションを画面に戻します。これは比較的迅速かつ簡単に行う必要がありますが、各ピクセルをヒットする必要があります(言い換えれば、テキストの種類と、そうでないものを判断するために何らかの閾値を使用する必要があります)。

3

ここでは、GDI +でさまざまなブレンド処理を実行する方法について説明した記事です。私の実験に基づいて、DarkenまたはMultiplyブレンドモードがそのトリックを行います。他をブロックしながら

http://www.codeproject.com/KB/GDI-plus/KVImageProcess.aspx

関連する問題