不透明度マスクを使用すると、要素またはビジュアルの一部を透明または部分的に透明にすることができます。 不透明度マスクを作成するには、要素またはBrushのOpacityMask プロパティにVisualを適用します。 ブラシは要素またはビジュアルにマップされ、各ブラシ ピクセルの不透明度値を使用して、要素またはビジュアルの対応する各ピクセルの不透明度を決定します。
[前提条件]
この概要では、 Brush オブジェクトについて理解していることを前提としています。 ブラシの使用方法の概要については、「 単色とグラデーションによる描画の概要」を参照してください。 ImageBrushとDrawingBrushの詳細については、「イメージ、描画、およびビジュアルを使用した描画」を参照してください。
不透明度マスクを使用して視覚効果を作成する
不透明度マスクは、その内容を要素またはビジュアルにマッピングすることによって機能します。 その後、各ブラシのピクセルのアルファ チャネルを使用して、要素またはビジュアルの対応するピクセルの不透明度を決定します。ブラシの実際の色は無視されます。 ブラシの特定の部分が透明の場合、要素または視覚エフェクトの対応する部分が透明になります。 ブラシの特定の部分が不透明な場合、要素またはビジュアルの対応する部分の不透明度は変更されません。 不透明度マスクで指定された不透明度は、要素またはビジュアルに存在するすべての不透明度設定と組み合わされます。 たとえば、要素が 25% 不透明で、完全に不透明から完全に透明に遷移する不透明度マスクが適用されている場合、結果は 25% の不透明度から完全に透明に遷移する要素になります。
注
この概要の例では、イメージ要素での不透明度マスクの使用を示していますが、不透明度マスクは、パネルやコントロールを含む任意の要素または Visualに適用できます。
不透明度マスクは、ビューからフェードするイメージやボタンの作成、要素へのテクスチャの追加、グラデーションを組み合わせてガラスのようなサーフェスを生成するなど、興味深い視覚効果を作成するために使用されます。 次の図は、不透明度マスクの使用方法を示しています。 チェック模様の背景は、マスクの透明部分を示すために使われます。
不透明度マスクの例
不透明度マスクの作成
不透明度マスクを作成するには、 Brush を作成し、要素またはビジュアルの OpacityMask プロパティに適用します。 任意の種類の Brush を不透明度マスクとして使用できます。
LinearGradientBrush、RadialGradientBrush: 要素または画像が表示から消えるために使用されます。
次の図は、不透明度マスクとして使用される LinearGradientBrush を示しています。
LinearGradientBrush 不透明度マスクの例ImageBrush: テクスチャやソフトなエッジまたは破れたエッジの効果を作成するために使用するものです。
次の図は、不透明度マスクとして使用される ImageBrush を示しています。
LinearGradientBrush 不透明度マスクの例DrawingBrush:図形、画像、グラデーションのパターンから複雑な不透明度マスクを作成するために使用します。
次の図は、不透明度マスクとして使用される DrawingBrush を示しています。
DrawingBrushの不透明度マスク例
グラデーション ブラシ (LinearGradientBrush と RadialGradientBrush) は、不透明度マスクとして使用するのに特に適しています。 SolidColorBrushは領域を均一な色で塗りつぶすので、不透明度マスクが低くなります。SolidColorBrushを使用することは、要素またはビジュアルのOpacityプロパティを設定することと同じです。
グラデーションを不透明度マスクとして使用する
グラデーションの塗りつぶしを作成するには、2 つ以上のグラデーションストップを指定します。 各グラデーションの分岐点には、色と位置が含まれています (グラデーションの作成と使用の詳細については、「 単色とグラデーションによる塗りつぶしの概要 」を参照してください)。 このプロセスは、グラデーションを不透明度マスクとして使用する場合と同じですが、色をブレンドする代わりに、不透明度マスクグラデーションでアルファ チャネル値がブレンドされる点が異なります。 したがって、グラデーションの内容の実際の色は重要ではありません。各色のアルファ チャネル (不透明度) のみが重要です。 次に例を示します。
<!--With the opacity mask:-->
<Image
Width="200" Height="150"
Source="sampleImages\Waterlilies.jpg"
Margin="10"
HorizontalAlignment="Left"
Grid.Column="2" Grid.Row="3">
<Image.OpacityMask>
<LinearGradientBrush StartPoint="0.1,0.1" EndPoint="0.75,0.75">
<LinearGradientBrush.GradientStops>
<GradientStop Offset="0" Color="Black"/>
<GradientStop Offset="1" Color="Transparent"/>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Image.OpacityMask>
</Image>
不透明度マスクのグラデーションの分岐点を指定する
前の例では、システム定義の色 Black がグラデーションの開始色として使用されています。 Colorsを除くTransparent クラスのすべての色は完全に不透明であるため、グラデーション不透明度マスクの開始色を定義するために使用できます。
不透明度マスクを定義するときにアルファ値をさらに制御するには、マークアップで ARGB 16 進数表記を使用するか、 Color.FromScRgb メソッドを使用して、色のアルファ チャネルを指定できます。
"XAML" での色の不透明度の指定
Extensible Application Markup Language (XAML) では、ARGB の 16 進数表記を使用して、個々の色の不透明度を指定します。 ARGB 16 進数表記では、次の構文が使用されます。
#
aarrggbb
前の行の aa は、色の不透明度を指定するために使用される 2 桁の 16 進数の値を表します。 rr、gg、bb はそれぞれ、色の赤、緑、青の量を指定するために使用される 2 桁の 16 進数の値を表します。 各 16 進数には、0 ~ 9 または A から F の値を指定できます。 0 は最小の値で、F は最大です。 アルファ値 00 は完全に透明な色を指定し、FF のアルファ値は完全に不透明な色を作成します。 次の例では、16 進数の ARGB 表記を使用して 2 色を指定しています。 1 つ目は完全に不透明で、2 つ目は完全に透明です。
<Canvas.OpacityMask>
<RadialGradientBrush>
<RadialGradientBrush.GradientStops>
<GradientStop Offset="0" Color="#FF000000"/>
<GradientStop Offset="1" Color="#00000000"/>
</RadialGradientBrush.GradientStops>
</RadialGradientBrush>
</Canvas.OpacityMask>
イメージを不透明度マスクとして使用する
画像は不透明度マスクとしても使用できます。 次の図に例を示します。 チェック模様の背景は、マスクの透明部分を示すために使われます。
不透明度マスクの例
イメージを不透明度マスクとして使用するには、 ImageBrush を使用してイメージを格納します。 不透明度マスクとして使用するイメージを作成する場合は、ポータブル ネットワーク グラフィックス (PNG) など、複数のレベルの透明度をサポートする形式で画像を保存します。 次の例は、前の図の作成に使用したコードを示しています。
<!-- With the Opacity Mask-->
<Image
Height="150"
Width="200"
Source="sampleImages/Waterlilies.jpg"
HorizontalAlignment="Left"
Margin="10"
Grid.Column="2" Grid.Row="1">
<Image.OpacityMask>
<ImageBrush ImageSource="sampleImages/tornedges.png"/>
</Image.OpacityMask>
</Image>
タイルイメージを不透明度マスクとして使用する
次の例では、同じ画像を別の ImageBrushで使用しますが、ブラシのタイリング機能を使用して、50 ピクセル四方の画像のタイルを生成します。
<!-- With the Opacity Mask -->
<Image
Height="150"
Width="200"
Source="sampleImages/Waterlilies.jpg"
HorizontalAlignment="Left"
Margin="10"
Grid.Column="2" Grid.Row="2">
<Image.OpacityMask>
<ImageBrush
Viewport="0,0,50,50"
ViewportUnits="Absolute"
TileMode="Tile"
ImageSource="sampleImages/tornedges.png"/>
</Image.OpacityMask>
</Image>
図面から不透明度マスクを作成する
描画には不透明度マスクを使用できます。 図面に含まれる図形自体は、グラデーション、純色、画像、またはその他の描画で塗りつぶすことができます。 次の図は、不透明度マスクとして使用される描画の例を示しています。 チェック模様の背景は、マスクの透明部分を示すために使われます。
DrawingBrushの不透明度マスク例
図面を不透明度マスクとして使用するには、 DrawingBrush を使用して図面を含める必要があります。 次の例は、前の図の作成に使用したコードを示しています。
<!-- With the Opacity Mask-->
<Image
Grid.Row="4" Grid.Column="5"
Height="150"
Width="200"
Source="sampleImages/Waterlilies.jpg">
<Image.OpacityMask>
<DrawingBrush>
<DrawingBrush.Drawing>
<GeometryDrawing>
<GeometryDrawing.Brush>
<RadialGradientBrush>
<RadialGradientBrush.GradientStops>
<GradientStop Offset="0" Color="Black" />
<GradientStop Offset="1" Color="Transparent" />
</RadialGradientBrush.GradientStops>
</RadialGradientBrush>
</GeometryDrawing.Brush>
<GeometryDrawing.Geometry>
<RectangleGeometry Rect="0.05,0.05 0.9,0.9" />
</GeometryDrawing.Geometry>
<GeometryDrawing.Pen>
<Pen Thickness="0.1" Brush="Black" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</Image.OpacityMask>
</Image>
タイル描画を不透明度マスクとして使用する
ImageBrushと同様に、DrawingBrushを作成してその図面をタイル化できます。 次の例では、描画ブラシを使用してタイル不透明度マスクを作成します。
<!-- With the Opacity Mask-->
<Button
Grid.Row="8" Grid.Column="5"
Height="100"
Width="200"
FontFamily="MS Gothic"
FontSize="16">
A Button
<Button.OpacityMask>
<DrawingBrush Viewport="0,0,0.25,0.25" TileMode="Tile">
<DrawingBrush.Drawing>
<GeometryDrawing>
<GeometryDrawing.Brush>
<RadialGradientBrush>
<RadialGradientBrush.GradientStops>
<GradientStop Offset="0" Color="Black" />
<GradientStop Offset="1" Color="Transparent" />
</RadialGradientBrush.GradientStops>
</RadialGradientBrush>
</GeometryDrawing.Brush>
<GeometryDrawing.Geometry>
<RectangleGeometry Rect="0.05,0.05 0.9,0.9" />
</GeometryDrawing.Geometry>
<GeometryDrawing.Pen>
<Pen Thickness="0.1" Brush="Black" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</Button.OpacityMask>
</Button>
こちらも参照ください
.NET Desktop feedback