Información general sobre efectos de imagen

Los efectos de imagen permiten a los diseñadores y desarrolladores aplicar efectos visuales a contenido representado de Windows Presentation Foundation (WPF). Por ejemplo, los efectos de imagen permiten aplicar con facilidad un efecto DropShadowBitmapEffect o un efecto de desenfoque a una imagen o un botón.

Importante

En .NET Framework 4 o versiones posteriores, la clase BitmapEffect está obsoleta. Si intenta usar la clase BitmapEffect, obtendrá una excepción de obsolesencia. La alternativa no obsoleta a la clase BitmapEffect es la clase Effect. En la mayoría de las situaciones, la clase Effect es significativamente más rápida.

Efectos de imagen de WPF

Los efectos de imagen (objeto BitmapEffect) son operaciones de procesamiento de píxeles sencillas. Un efecto de imagen toma un elemento BitmapSource como una entrada y produce un nuevo elemento BitmapSource después de aplicar el efecto, como un desenfoque o una sombra paralela. Cada efecto de imagen expone propiedades que pueden controlar las propiedades de filtrado, como Radius de BlurBitmapEffect.

Como caso especial, en WPF, los efectos se pueden establecer como propiedades en los objetos Visual en directo, como Button o TextBox. El procesamiento de píxeles se aplica y se representa en tiempo de ejecución. En este caso, en el momento de la representación, un elemento Visual se convierte automáticamente a su BitmapSource equivalente y se usa como entrada en BitmapEffect. La salida reemplaza el comportamiento de representación predeterminado del objeto Visual. Por este motivo, los objetos BitmapEffect fuerzan a los objetos visuales a representarse solo en software, es decir, no hay ninguna aceleración de hardware en los objetos visuales cuando se aplican los efectos.

Nota:

Los efectos de imagen de WPF se representan en modo de software. Cualquier objeto que aplique un efecto también se representará en software. El rendimiento disminuye al máximo al usar los efectos de imagen en objetos visuales grandes o al animar las propiedades de un efecto de imagen. Esto no quiere decir que no se deben usar efectos de imagen de esta manera en absoluto, pero hay que tener cuidado y probarlos exhaustivamente para asegurarse de que los usuarios obtengan la experiencia esperada.

Nota:

Los efectos de imagen de WPF no admiten la ejecución de confianza parcial. Una aplicación debe tener permisos de plena confianza para usar efectos de imagen.

Cómo aplicar un efecto

BitmapEffect es una propiedad de Visual. Por ello, aplicar efectos en objetos visuales, como Button, Image, DrawingVisual o UIElement, es tan sencillo como establecer una propiedad. BitmapEffect puede establecerse en un único objeto BitmapEffect o varios efectos pueden encadenarse mediante el objeto BitmapEffectGroup.

En el ejemplo siguiente se muestra cómo aplicar un elemento BitmapEffect en lenguaje XAML.

<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>

En el ejemplo siguiente se muestra cómo aplicar un elemento BitmapEffect en código.

// 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;

Nota:

Cuando un elemento BitmapEffect se aplica a un contenedor de diseño, como DockPanel o Canvas, el efecto se aplica al árbol visual del elemento u objeto visual, incluyendo todos sus elementos secundarios.

Crear efectos personalizados

WPF también proporciona interfaces no administradas para crear efectos personalizados que pueden utilizarse en aplicaciones de WPF administradas. Para obtener material de referencia adicional para crear efectos de imagen personalizados, consulte la documentación de Unmanaged WPF Bitmap Effect (Efecto de imagen de WPF no administrado).

Vea también