2011-02-06 19 views
6

System.Drawing.Graphicsクラスには、次の2つのオプションを持つCompositionModeプロパティがあります。SourceOver(アルファコンポーネントに基づいて、既存の背景で描画されたものをブレンドします)または描画されているもので背景を単純に上書きするSourceCopy。WPFでアルファブレンドモードを変更しますか?

WPFには何か類似点はありますか?

たとえば、別のPolyLineの上にPolyLineを描画すると、新しいPolyLineは常に背景とアルファベットで表示されます。私はそれが使用されているコンテナから独立していると思う。私はキャンバスを使用していますが、ブレンドモードプロパティはどこにも見つかりませんでした。私がしたいのは、上記のSourceCopyコンポジションモードです。私。新しいPolyLineは既にキャンバス上にあるものを上書きするだけです。

Canvas backbufferにアクセスできないため、Pixel Shaderを使用していない簡単な方法があります(私が理解する限り - とにかく動作しません)。

私はキャンバスにこだわっていないので、上書きモードをサポートしているコンテナを使用してください。

私は現在、System.Drawing.Graphicsコンテキストを取得してからCompositionModeを操作するWriteableBitmapに基づいたソリューションを用意しています。それは機能しますが、私のウィンドウはフルスクリーンであるため、このソリューションはパフォーマンスに重大な影響を与えます。

明確化と例: WPFウィンドウは完全に透明で、キャンバスも背景色(0,0,0,0)です。今度は、Color.FromArgb(128,128,0,0)でPolyLineを描画します。私は今半透明の赤いポリラインを持っています。次に、Color.FromArgb(0,0,0,0)を使って同じPolyLineを描画します。結果はアルファブレンディングのために以前と同じです。しかし、私が望むのは、2番目のポリラインで赤いポリラインが消去されていることです(これは、GraphicsクラスのSourceCopyモードとまったく同じです)。

答えて

0

私が必要とすることは、 (255)を完全に不透明なアルファ値(つまり255)にしてはいけません。

+1

はい、しかし、私はすべてのアルファ値で背景を上書きする必要があります。私はちょうど私の質問に追加しました。 – Harald

0

あなたはクリッピングマスクを適用することができます。その下にありますが、多くの要素がクリップされる必要があるので、維持するのは難しいかもしれません...

+0

WritableBitmapを使用している私の現在のソリューションでは、(AddDirtyRectを使用して)クリッピング矩形を適用します。 – Harald

関連する問題