ビットマップ効果の概要

ビットマップ効果を使用すると、設計者と開発者は、レンダリングされる Windows Presentation Foundation (WPF) コンテンツに視覚効果を適用できます。 たとえば、ビットマップ効果では、DropShadowBitmapEffect 効果またはぼかし効果をイメージやボタンに簡単に適用できます。

重要

.NET Framework 4 以降では、BitmapEffect クラスが廃止されています。 BitmapEffect クラスを使用しようとすると、廃止例外が発生します。 BitmapEffect クラスの旧式でない代替クラスは、Effect クラスです。 ほとんどの場合、Effect クラスの方がはるかに高速です。

WPF のビットマップ効果

ビットマップ効果 (BitmapEffect オブジェクト) は、簡単なピクセル処理操作です。 ビットマップ効果は、入力として BitmapSource を受け取り、効果 (ぼかしやドロップ シャドウなど) を適用した後で、新しい BitmapSource を生成します。 各ビットマップ効果では、フィルター処理プロパティを制御できるプロパティが公開されています (BlurBitmapEffectRadius など)。

特殊なケースとして、WPF では、効果をライブ Visual オブジェクトのプロパティとして設定できます (ButtonTextBox など)。 ピクセル処理は、実行時に適用されてレンダリングされます。 この場合、レンダリング時に、Visual が同等の BitmapSource に自動的に変換され、BitmapEffect への入力としてフィードされます。 出力は、Visual オブジェクトの既定のレンダリング動作を置き換えます。 このため、BitmapEffect オブジェクトでは、ビジュアル オブジェクトがソフトウェアのみでレンダリングされるよう強制されます。つまり、効果の適用時にハードウェア アクセラレーションは利用されません。

  • BlurBitmapEffect は、オブジェクトのピントが外れた表示をシミュレートします。

  • OuterGlowBitmapEffect は、オブジェクトの周囲に色の付いた光輪を作成します。

  • DropShadowBitmapEffect は、オブジェクトの後ろに影を作成します。

  • BevelBitmapEffect は、指定された曲線に従ってイメージの表面を浮き上がらせるベベルを作成します。

  • EmbossBitmapEffect は、人工光源からの奥行きと質感の印象を与えるために、Visual のバンプ マッピングを作成します。

注意

WPF のビットマップ効果は、ソフトウェア モードでレンダリングされます。 効果を適用するオブジェクトも、ソフトウェアでレンダリングされます。 大きなビジュアルにビットマップ効果を使うとき、またはビットマップ効果のプロパティをアニメーション化するときに、パフォーマンスが最も低下します。 このような方法ではビットマップ効果をまったく使ってはならないということではありませんが、注意を払い、十分にテストを行って、ユーザー エクスペリエンスが期待どおりになることを確認する必要があります。

注意

WPF のビットマップ効果は、部分信頼の実行をサポートしていません。 ビットマップ効果を使うには、アプリケーションが完全な信頼のアクセス許可を持つ必要があります。

効果を適用する方法

BitmapEffectVisual のプロパティです。 したがって、ButtonImageDrawingVisualUIElement などのビジュアル オブジェクトには、プロパティを設定するだけで簡単に効果を適用できます。 BitmapEffect を 1 つの BitmapEffect オブジェクトに設定することも、BitmapEffectGroup オブジェクトを使用して複数の効果を連鎖させることもできます。

次の例では、Extensible Application Markup Language (XAML) で BitmapEffect を適用する方法を示します。

<Button  Width="200">You Can't Read This!
  <Button.BitmapEffect>

  <!-- <BitmapEffectGroup> would go here if you wanted to apply more 
         then one effect to the Button. However, in this example only  
         one effect is being applied so BitmapEffectGroup does not need  
         to be included. -->

    <!-- The larger the Radius, the more blurring. The default range is 20.
         In addition, the KernelType is set to a box kernel. A box kernel
         creates less disruption (less blur) then the default Gaussian kernel. -->
    <BlurBitmapEffect Radius="10" KernelType="Box" />

  </Button.BitmapEffect>
</Button>

次の例では、コードで BitmapEffect を適用する方法を示します。

// Get a reference to the Button.
Button myButton = (Button)sender;

// Initialize a new BlurBitmapEffect that will be applied
// to the Button.
BlurBitmapEffect myBlurEffect = new BlurBitmapEffect();

// Set the Radius property of the blur. This determines how
// blurry the effect will be. The larger the radius, the more
// blurring.
myBlurEffect.Radius = 10;

// Set the KernelType property of the blur. A KernalType of "Box"
// creates less blur than the Gaussian kernal type.
myBlurEffect.KernelType = KernelType.Box;

// Apply the bitmap effect to the Button.
myButton.BitmapEffect = myBlurEffect;

注意

BitmapEffectDockPanelCanvas などのレイアウト コンテナーに適用すると、すべての子要素を含む、要素つまりビジュアル オブジェクトのビジュアル ツリーに効果が適用されます。

カスタム効果の作成

WPF では、マネージド WPF アプリケーションで使用できるカスタム効果を作成するためのアンマネージド インターフェイスも提供されています。 カスタム ビットマップ効果の作成に関する参考資料については、「Unmanaged WPF Bitmap Effect」(アンマネージ WPF ビットマップ効果) ドキュメントをご覧ください。

関連項目