D3DImage Clase

Definición

ImageSource que muestra una superficie de Direct3D creada por el usuario.

public ref class D3DImage : System::Windows::Media::ImageSource
public class D3DImage : System.Windows.Media.ImageSource
type D3DImage = class
    inherit ImageSource
Public Class D3DImage
Inherits ImageSource
Herencia

Ejemplos

En el ejemplo de código siguiente se muestra cómo declarar un D3DImage en XAML. Debes asignar el System.Windows.Interop espacio de nombres, ya que no se incluye en los espacios de nombres XAML predeterminados. Para obtener más información, consulte Tutorial: Hospedar contenido Direct3D9 en WPF.

    <Window x:Class="D3DHost.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:i="clr-namespace:System.Windows.Interop;assembly=PresentationCore"
    Title="MainWindow" Height="300" Width="300" Background="PaleGoldenrod">
    <Grid>
        <Image x:Name="imgelt">
            <Image.Source>
                <i:D3DImage x:Name="d3dimg" />
            </Image.Source>
        </Image>
    </Grid>
</Window>

Comentarios

Use la D3DImage clase para hospedar contenido de Direct3D en una aplicación de Windows Presentation Foundation (WPF).

Llame al Lock método para cambiar el contenido de Direct3D mostrado por .D3DImage Llame al SetBackBuffer método para asignar una superficie de Direct3D a .D3DImage Llama al AddDirtyRect método para realizar un seguimiento de las actualizaciones de la superficie de Direct3D. Llame al Unlock método para mostrar las áreas modificadas.

La clase D3DImage administra dos búferes de pantalla, que se denominan búfer de reserva y búfer frontal. El búfer de reserva es la superficie de Direct3D. Los cambios en el búfer de reserva se copian al búfer frontal cuando se llama al método Unlock, donde se muestra en el hardware. En ocasiones, el búfer frontal deja de estar disponible. Esta falta de disponibilidad puede deberse a bloqueos de pantalla, aplicaciones Direct3D exclusivas de pantalla completa, cambio de usuario u otras actividades del sistema. Cuando esto ocurre, se notifica a la aplicación WPF al controlar el evento IsFrontBufferAvailableChanged. La forma en que la aplicación responde al búfer frontal que no está disponible depende de si WPF está habilitado para revertir a la representación de software. El método SetBackBuffer tiene una sobrecarga que toma un parámetro que especifica si WPF revierte a la representación de software.

Responder a un búfer frontal no disponible cuando WPF no se revierte a la representación de software

Cuando se llama a la sobrecarga SetBackBuffer(D3DResourceType, IntPtr) o se llama a la sobrecarga SetBackBuffer(D3DResourceType, IntPtr, Boolean) con el parámetro enableSoftwareFallback establecido en false, el sistema de representación libera su referencia al búfer de reserva cuando el búfer frontal deja de estar disponible y no se muestra nada. Cuando el búfer frontal está disponible de nuevo, el sistema de representación genera el evento IsFrontBufferAvailableChanged para notificar a la aplicación WPF. Puede crear un controlador de eventos para que el evento IsFrontBufferAvailableChanged reinicie la representación de nuevo con una superficie de Direct3D válida. Para reiniciar la representación, debe llamar a SetBackBuffer.

Responder a un búfer frontal no disponible cuando WPF recurre a la representación de software

Cuando se llama a la sobrecarga SetBackBuffer(D3DResourceType, IntPtr, Boolean) con el parámetro enableSoftwareFallback establecido en true, el sistema de representación conserva la referencia al búfer de reserva cuando el búfer frontal deja de estar disponible, por lo que no es necesario llamar a SetBackBuffer cuando el búfer frontal está disponible de nuevo. Puede haber situaciones en las que el dispositivo del usuario deje de estar disponible. Cuando esto ocurre, llame SetBackBuffer a para liberar la referencia de WPF al búfer de reserva. Si necesita restablecer el dispositivo, llame a SetBackBuffer con el parámetro backBuffer establecido en null y, a continuación, llame a SetBackBuffer de nuevo con backBuffer establecido en una superficie Direct3D válida.

Nota

El rendimiento depende en gran medida de la configuración de la superficie direct3D. Para obtener más información, consulte Consideraciones de rendimiento para la interoperabilidad entre Direct3D9 y WPF.

Nota

La D3DImage clase no muestra el contenido de Direct3D cuando WPF se representa en software, como a través de una conexión a Escritorio remoto, a menos que llame SetBackBuffer(D3DResourceType, IntPtr, Boolean) a y especifique true para el enableSoftwareFallback parámetro .

Constructores

D3DImage()

Inicializa una nueva instancia de la clase D3DImage.

D3DImage(Double, Double)

Inicializa una nueva instancia de la clase D3DImage con la resolución de pantalla especificada.

Campos

IsFrontBufferAvailableProperty

Identifica la propiedad de dependencia IsFrontBufferAvailable.

Propiedades

CanFreeze

Obtiene un valor que indica si el objeto se puede convertir en no modificable.

(Heredado de Freezable)
DependencyObjectType

Obtiene el DependencyObjectType objeto que encapsula el tipo CLR de esta instancia.

(Heredado de DependencyObject)
Dispatcher

Obtiene el objeto Dispatcher al que está asociado DispatcherObject.

(Heredado de DispatcherObject)
HasAnimatedProperties

Obtiene un valor que indica si uno o más objetos AnimationClock se asocian a cualquiera de las propiedades de dependencia de este objeto.

(Heredado de Animatable)
Height

Obtiene el alto de D3DImage.

IsFrontBufferAvailable

Obtiene un valor que indica si existe un búfer frontal.

IsFrozen

Obtiene un valor que indica si el objeto se puede modificar actualmente.

(Heredado de Freezable)
IsSealed

Obtiene un valor que indica si esta instancia está actualmente sellada (es de solo lectura).

(Heredado de DependencyObject)
Metadata

Obtiene los metadatos asociados al origen de la imagen.

PixelHeight

Obtiene el alto de D3DImage, en píxeles.

PixelWidth

Obtiene el ancho de D3DImage, en píxeles.

Width

Obtiene el ancho de D3DImage.

Métodos

AddDirtyRect(Int32Rect)

Especifica el área del búfer de reserva que ha cambiado.

ApplyAnimationClock(DependencyProperty, AnimationClock)

Se aplica AnimationClock al valor de DependencyProperty especificado. Si la propiedad ya está animada, se usa el comportamiento de entrega SnapshotAndReplace.

(Heredado de Animatable)
ApplyAnimationClock(DependencyProperty, AnimationClock, HandoffBehavior)

Se aplica AnimationClock al valor de DependencyProperty especificado. Si la propiedad ya está animada, se usa el objeto HandoffBehavior especificado.

(Heredado de Animatable)
BeginAnimation(DependencyProperty, AnimationTimeline)

Aplica una animación a la DependencyProperty especificada. La animación se inicia al representar el siguiente fotograma. Si la propiedad especificada ya está animada, se usa el comportamiento de entrega SnapshotAndReplace.

(Heredado de Animatable)
BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior)

Aplica una animación a la DependencyProperty especificada. La animación se inicia al representar el siguiente fotograma. Si la propiedad especificada ya está animada, se usa el objeto HandoffBehavior especificado.

(Heredado de Animatable)
CheckAccess()

Determina si el subproceso de la llamada tiene acceso a DispatcherObject.

(Heredado de DispatcherObject)
ClearValue(DependencyProperty)

Borra el valor local de una propiedad. La propiedad que se va a borrar se especifica mediante un identificador DependencyProperty.

(Heredado de DependencyObject)
ClearValue(DependencyPropertyKey)

Borra el valor local de una propiedad de solo lectura. La propiedad que se va a borrar se especifica mediante un DependencyPropertyKey.

(Heredado de DependencyObject)
Clone()

Crea un clon modificable de este objeto D3DImage y hace copias en profundidad de sus valores. Cuando se copian propiedades de dependencia, este método copia las referencias de recursos y los enlaces de datos (que posiblemente ya no se resuelvan), pero no copia las animaciones ni sus valores actuales.

CloneCore(Freezable)

Convierte la instancia en un clon (copia en profundidad) de la clase Freezable especificada con valores de propiedad base (no animadas).

CloneCurrentValue()

Crea un clon modificable de este objeto D3DImage y hace copias en profundidad de sus valores actuales. Las referencias de recursos, los enlaces de datos y las animaciones no se copian, pero sí sus valores actuales.

CloneCurrentValueCore(Freezable)

Convierte esta instancia en un clon modificable (copia en profundidad) del Freezable especificado mediante los valores de propiedad actuales.

CoerceValue(DependencyProperty)

Convierte el valor de la propiedad de dependencia especificada. Esto se logra invocando cualquier función CoerceValueCallback especificada en los metadatos de la propiedad de dependencia tal como existe en la clase DependencyObject que llama.

(Heredado de DependencyObject)
CopyBackBuffer()

Crea una copia de software de D3DImage.

CreateInstance()

Inicializa una nueva instancia de la clase Freezable.

(Heredado de Freezable)
CreateInstanceCore()

Cuando se implementa en una clase derivada, crea una nueva instancia de la clase D3DImage derivada.

Equals(Object)

Determina si un objeto DependencyObject proporcionado es equivalente al objeto DependencyObject actual.

(Heredado de DependencyObject)
Finalize()

Libera recursos y realiza otras operaciones de limpieza antes de que se reclame el elemento D3DImage durante la recolección de elementos no usados.

Freeze()

Convierte el objeto actual en no modificable y establece su propiedad IsFrozen en true.

(Heredado de Freezable)
FreezeCore(Boolean)

Convierte D3DImage en no modificable o determina si se puede convertir en no modificable.

GetAnimationBaseValue(DependencyProperty)

Devuelve el valor no animado del objeto DependencyProperty especificado.

(Heredado de Animatable)
GetAsFrozen()

Crea una copia inmovilizada de Freezable, con los valores de propiedades base (no animadas). Puesto que se inmoviliza la copia, se copia cualquier subobjeto inmovilizado por referencia.

(Heredado de Freezable)
GetAsFrozenCore(Freezable)

Convierte la instancia en un clon inmovilizado de la clase Freezable especificada con los valores de propiedades base (no animadas).

GetCurrentValueAsFrozen()

Crea una copia inmovilizada de Freezable con los valores de propiedad actuales. Puesto que se inmoviliza la copia, se copia cualquier subobjeto inmovilizado por referencia.

(Heredado de Freezable)
GetCurrentValueAsFrozenCore(Freezable)

Convierte la instancia actual en un clon inmovilizado del valor de Freezable especificado. Si el objeto tiene propiedades de dependencia animadas, se copian sus valores animados actuales.

GetHashCode()

Obtiene un código hash de este objeto DependencyObject.

(Heredado de DependencyObject)
GetLocalValueEnumerator()

Crea un enumerador especializado para determinar qué propiedades de dependencia han establecido localmente los valores en DependencyObject.

(Heredado de DependencyObject)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
GetValue(DependencyProperty)

Devuelve el valor efectivo actual de una propiedad de dependencia en esta instancia de un DependencyObject.

(Heredado de DependencyObject)
InvalidateProperty(DependencyProperty)

Vuelve a evaluar el valor efectivo para la propiedad de dependencia especificada.

(Heredado de DependencyObject)
Lock()

Bloquea D3DImage y habilita las operaciones en el búfer de reserva.

MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
OnChanged()

Se le llama cuando el objeto Freezable actual se modifica.

(Heredado de Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject)

Se asegura de que se establecen los punteros contextuales adecuados para un miembro de datos DependencyObjectType que se acaba de establecer.

(Heredado de Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty)

Este miembro admite la infraestructura de Windows Presentation Foundation (WPF) y no está pensada para usarse directamente desde el código.

(Heredado de Freezable)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Reemplaza la implementación DependencyObject de OnPropertyChanged(DependencyPropertyChangedEventArgs) para invocar también cualquier controlador Changed en respuesta a una propiedad de dependencia cambiante de tipo Freezable.

(Heredado de Freezable)
ReadLocalValue(DependencyProperty)

Devuelve el valor local de una propiedad de dependencia, si existe.

(Heredado de DependencyObject)
ReadPreamble()

Se asegura de que se tiene acceso a Freezable desde un subproceso válido. Los herederos de Freezable deben llamar a este método al inicio de las API que leen miembros de datos que no son propiedades de dependencia.

(Heredado de Freezable)
SetBackBuffer(D3DResourceType, IntPtr)

Asigna una superficie de Direct3D como origen del búfer de reserva.

SetBackBuffer(D3DResourceType, IntPtr, Boolean)

Asigna una superficie de Direct3D como origen del búfer de reserva.

SetCurrentValue(DependencyProperty, Object)

Establece el valor de una propiedad de dependencia sin cambiar el origen del valor.

(Heredado de DependencyObject)
SetValue(DependencyProperty, Object)

Establece el valor local de una propiedad de dependencia, especificado mediante el identificador de la propiedad de dependencia.

(Heredado de DependencyObject)
SetValue(DependencyPropertyKey, Object)

Establece el valor local de una propiedad de dependencia de solo lectura, especificado por el identificador DependencyPropertyKey de la propiedad de dependencia.

(Heredado de DependencyObject)
ShouldSerializeProperty(DependencyProperty)

Devuelve un valor que indica si los procesos de serialización deben serializar el valor de la propiedad de dependencia especificada.

(Heredado de DependencyObject)
ToString()

Crea una representación de cadena de este objeto basándose en la referencia cultural actual.

(Heredado de ImageSource)
ToString(IFormatProvider)

Crea una representación de cadena de este objeto basándose en el objeto IFormatProvider que se pasa. Si el proveedor es null, se usará la propiedad CurrentCulture.

(Heredado de ImageSource)
TryLock(Duration)

Intenta bloquear D3DImage y espera durante el tiempo especificado.

Unlock()

Disminuye el número de bloqueos para D3DImage.

VerifyAccess()

Exige que el subproceso de la llamada tenga acceso a DispatcherObject.

(Heredado de DispatcherObject)
WritePostscript()

Genera el evento Changed para Freezable e invoca su método OnChanged(). Las clases que derivan de Freezable deben llamar a este método al final de cualquier API que modifique miembros de clase que no estén almacenados como propiedades de dependencia.

(Heredado de Freezable)
WritePreamble()

Comprueba que no se inmovilice Freezable y que se tiene acceso desde un contexto de subproceso válido. Los herederos de Freezable deben llamar a este método al inicio de las API que escriben en miembros de datos que no son propiedades de dependencia.

(Heredado de Freezable)

Eventos

Changed

Se produce cuando se modifican la clase Freezable o un objeto que la contiene.

(Heredado de Freezable)
IsFrontBufferAvailableChanged

Se produce cuando cambia la propiedad IsFrontBufferAvailable.

Implementaciones de interfaz explícitas

IFormattable.ToString(String, IFormatProvider)

Da formato al valor de la instancia actual usando el formato especificado.

(Heredado de ImageSource)

Se aplica a