Applicare effetti bitmap agli elementi di WPF

di Cristian Civera, in Windows Presentation Foundation,

Windows Presentation Foundation è un framework dalle straordinarie potenzialità che oltre a lavorare in vettoriale, sfruttare la GPU, consentire trasformazioni e animazioni, permette di applicare effetti su qualsiasi elemento. Questi effetti sono rappresentati dalle classi BitmapEffect e derivate ed è esposta dalla omonima proprietà sul tipo UIElement.

In WPF sono già definiti i seguenti effetti:
- BlurBitmapEffect: applica un effetto sfuocato;
- OuterGlowBitmapEffect: crea degli aloni intorno all'oggetto;
- DropShadowBitmapEffect: applica un'ombra sull'oggetto;
- BevelBitmapEffect: applica un effetto di smussatura interna o esterna;
- EmbossBitmapEffect: applica un effetto di pietrificazione.

Un esempio rende più delle parole; ecco quindi del markup:

<StackPanel Margin="50">
    <Image Source="http://gui.winfxitalia.com/images/winfxitalia.gif" Stretch="None">
        <Image.BitmapEffect>
            <BlurBitmapEffect Radius="4" />
        </Image.BitmapEffect>
    </Image>

    <Image Margin="10" Source="http://gui.winfxitalia.com/images/winfxitalia.gif" Stretch="None">
        <Image.BitmapEffect>
            <OuterGlowBitmapEffect GlowColor="Red" GlowSize="10" Opacity="0.4" Noise="0.4" />
        </Image.BitmapEffect>
    </Image>

    <Image Margin="10" Source="http://gui.aspitalia.com/images/aspitalia.gif" Stretch="None">
        <Image.BitmapEffect>
            <DropShadowBitmapEffect Color="Blue" Direction="360" ShadowDepth="25" Softness="1" Opacity="0.5"/>
        </Image.BitmapEffect>
    </Image>

    <Image Margin="10" Source="http://gui.aspitalia.com/images/aspitalia.gif" Stretch="None">
        <Image.BitmapEffect>
            <BevelBitmapEffect BevelWidth="15" EdgeProfile="CurvedOut" LightAngle="320" Relief="0.4" Smoothness="0.3"/>
        </Image.BitmapEffect>
    </Image>

    <Image Margin="10" Source="http://gui.aspitalia.com/images/aspitalia.gif" Stretch="None">
        <Image.BitmapEffect>
             <EmbossBitmapEffect Relief="1" LightAngle="100" />
        </Image.BitmapEffect>
    </Image>
</StackPanel>

E questo è il risultato:

Occorre prestare attenzione al fatto che i BitmapEffect sono trasformazioni scritte con codice unmanaged che caricano sulla CPU e sono applicate a bitmap e cioè a immagini vere e proprie. Ogni volta che l'UIElement al quale è applicato l'effetto, cambia, l'operazione viene nuovamente eseguita. Si deduce quindi che l'uso dei BitmapEffect deve essere moderato. Nel caso si vogliano applicare più effetti viene in aiuto BitmapEffectGroup:

<Image Margin="10" Source="http://gui.aspitalia.com/images/aspitalia.gif" Stretch="None">
    <Image.BitmapEffect>
        <BitmapEffectGroup>
            <BlurBitmapEffect Radius="2" />
            <DropShadowBitmapEffect Color="Black" Direction="320" ShadowDepth="30" Softness="1" />
        </BitmapEffectGroup>
    </Image.BitmapEffect>
</Image>

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi