Freigeben über


Gewusst wie: Erstellen eines geprägten visuellen Effekts

Aktualisiert: November 2007

Der EmbossBitmapEffect kann für die Erstellung von Bump-Mapping des visuellen Objekts verwendet werden, um den Eindruck von Tiefe und Textur von einer animierten Lichtquelle zu vermitteln. Weiter unten finden Sie eine Reihe von Beispielen, in denen Folgendes gezeigt wird:

  • Verwenden von einfachem Markup, um den Effekt auf ein Objekt anzuwenden

  • Verwenden von einem Style, um den Effekt auf ein oder mehrere Objekte anzuwenden

  • Verwenden von Code, um den Effekt auf ein Objekt anzuwenden

  • Verwenden einer Animation, um die Eigenschaften eines Effekts zu animieren, der auf ein Objekt angewendet wird

Hinweis: In allen unten stehenden Beispielen wird nur ein einzelner Effekt auf ein Objekt angewendet. Sie können BitmapEffectGroup verwenden, um mehrere Effekte anzuwenden. Beispiele finden Sie unter Gewusst wie: Erstellen mehrerer visueller Effekte.

Beispiel

Im folgenden Beispiel wird gezeigt, wie ein EmbossBitmapEffect verwendet wird, um ein geprägtes Bild zu erstellen.

<Page xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml">

    <StackPanel>

      <Image Width="360" Source="/images/WaterLilies.jpg" Margin="10" >
        <Image.BitmapEffect>

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

          <!-- The Relief property determines the amount of relief of the emboss.
               The valid range of values is 0-1 with 0 having the least relief and
               1 having the most. The default value is 0.44. The LightAngle determines 
               from what direction the artificial light is cast upon the embossed 
               object which effects shadowing. The valid range is from 0-360 (degrees)
               with 0 specifying the right-hand side of the object and successive values  
               moving counter-clockwise around the object. -->
          <EmbossBitmapEffect Relief="0.8" LightAngle="320" />
        </Image.BitmapEffect>
      </Image>

    </StackPanel>

</Page>

Im folgenden Beispiel wird gezeigt, wie ein Style verwendet wird, um einen EmbossBitmapEffect auf jedes Image auf der Seite anzuwenden.

<Page xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml">

  <!-- Resources define Styles for the entire page. -->
  <Page.Resources>

    <!-- This style applies to any Image on the page. -->
    <Style TargetType="{x:Type Image}">
      <Setter Property="BitmapEffect" >
        <Setter.Value>
          <EmbossBitmapEffect Relief="0.8" />
        </Setter.Value>
      </Setter>
    </Style>

  </Page.Resources>

  <StackPanel>

    <!-- The Style defined above applies to this Image which applies
         the EmbossBitmapEffect. -->
    <Image Width="360" Source="/images/WaterLilies.jpg" Margin="10" />

  </StackPanel>

</Page>

Im folgenden Beispiel wird gezeigt, wie mithilfe von Code ein EmbossBitmapEffect beim Laden auf ein Image angewendet wird.

Folgendes ist Extensible Application Markup Language (XAML) für das Beispiel.

<Page xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="SDKSample.EmbossExample" >

  <StackPanel>

    <!-- When this image loads, an EmbossBitmapEffect is applied to it. -->
    <Image Width="360" Loaded="OnLoadEmbossImage" Source="/images/WaterLilies.jpg" />

  </StackPanel>

</Page>

Folgendes ist der Code, in dem das Ereignis für das Markup behandelt wird.

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Input;
using System.Windows.Media.Effects;

namespace SDKSample
{

    public partial class EmbossExample : Page
    {

        // Add Bevel effect.
        void OnLoadEmbossImage(object sender, RoutedEventArgs args)
        {
            // Get a reference to the Button.
            Image myImage = (Image)sender;

            // Initialize a new BevelBitmapEffect that will be applied
            // to the Button.
            EmbossBitmapEffect myEmbossEffect = new EmbossBitmapEffect();

            // The LightAngle determines from what direction the artificial 
            // light is cast upon the embossed object which effects shadowing.
            // The valid range is from 0-360 (degrees)with 0 specifying the 
            // right-hand side of the object and successive values moving
            // counter-clockwise around the object.
            // Set the LightAngle to 320 degrees (lower right side). 
            myEmbossEffect.LightAngle = 320;

            // The Relief property determines the amount of relief of the emboss.
            // The valid range of values is 0-1 with 0 having the least relief and
            // 1 having the most. The default value is 0.44.
            myEmbossEffect.Relief = 0.8;

            // Apply the bitmap effect to the Image.
            myImage.BitmapEffect = myEmbossEffect;
        }

    }
}

Im folgenden Beispiel wird gezeigt, wie die LightAngle-Eigenschaft des EmbossBitmapEffect animiert werden kann, sodass das animierte Licht um das geprägte Bild gedreht wird, wodurch die vom geprägten Bild geworfenen Schatten entsprechend wandern.

<Page xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" >

  <StackPanel>

    <Image Source="/images/WaterLilies.jpg" Width="600"  Margin="10" >
      <Image.BitmapEffect>
        <EmbossBitmapEffect x:Name="myEmbossBitmapEffect"  Relief="0.8" LightAngle="0" />
      </Image.BitmapEffect>
      <Image.Triggers>
        <EventTrigger RoutedEvent="Image.Loaded">
          <BeginStoryboard>
            <Storyboard>

              <!-- Animate the LightAngle so that the artificial light
                   orbits around the embossed image which makes the
                   shadows cast by the emboss shift accordingly. -->
              <DoubleAnimation
               Storyboard.TargetName="myEmbossBitmapEffect"
               Storyboard.TargetProperty="LightAngle"
               From="0" To="360" Duration="0:0:3" />

            </Storyboard>
          </BeginStoryboard>
        </EventTrigger>
      </Image.Triggers>
    </Image>

  </StackPanel>

</Page>

Siehe auch

Aufgaben

Gewusst wie: Erstellen eines Leuchteffekts am äußeren Rand eines Objekts

Gewusst wie: Anwenden eines Weichzeichnereffekts auf grafische Elemente

Gewusst wie: Erstellen eines visuellen Schlagschatteneffekts

Gewusst wie: Erstellen eines abgeschrägten visuellen Effekts

Gewusst wie: Erstellen mehrerer visueller Effekte

Gewusst wie: Animieren mehrerer visueller Effekte

Konzepte

Übersicht über Bitmapeffekte