D3DImage Classe

Definizione

Oggetto ImageSource che visualizza una superficie Direct3D creata dall'utente.

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

Esempio

Nell'esempio di codice seguente viene illustrato come dichiarare un D3DImage oggetto in XAML. È necessario eseguire il mapping dello System.Windows.Interop spazio dei nomi perché non è incluso negli spazi dei nomi XAML predefiniti. Per altre informazioni, vedere Procedura dettagliata: Hosting di contenuto Direct3D9 in 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>

Commenti

Usare la D3DImage classe per ospitare contenuto Direct3D in un'applicazione Windows Presentation Foundation (WPF).

Chiamare il Lock metodo per modificare il contenuto Direct3D visualizzato da D3DImage. Chiamare il SetBackBuffer metodo per assegnare una superficie Direct3D a un oggetto D3DImage. Chiamare il AddDirtyRect metodo per tenere traccia degli aggiornamenti alla superficie Direct3D. Chiamare il Unlock metodo per visualizzare le aree modificate.

La D3DImage classe gestisce due buffer di visualizzazione, denominati buffer nascosto e buffer anteriore. Il buffer nascosto è la superficie Direct3D. Le modifiche apportate al buffer nascosto vengono copiate nel buffer anteriore quando si chiama il Unlock metodo , in cui viene visualizzato nell'hardware. Occasionalmente, il buffer anteriore diventa non disponibile. Questa mancanza di disponibilità può essere causata dal blocco dello schermo, dalle applicazioni Direct3D esclusive a schermo intero, dal cambio utente o da altre attività di sistema. In questo caso, l'applicazione WPF riceve una notifica gestendo l'evento IsFrontBufferAvailableChanged . Il modo in cui l'applicazione risponde al buffer anteriore che diventa non disponibile dipende dal fatto che WPF sia abilitato per eseguire il fallback al rendering software. Il SetBackBuffer metodo ha un overload che accetta un parametro che specifica se WPF esegue il fallback al rendering software.

Risposta a un buffer anteriore non disponibile quando WPF non esegue il fallback al rendering software

Quando si chiama l'overload SetBackBuffer(D3DResourceType, IntPtr) o si chiama l'overload SetBackBuffer(D3DResourceType, IntPtr, Boolean) con il enableSoftwareFallback parametro impostato su false, il sistema di rendering rilascia il relativo riferimento al buffer nascosto quando il buffer anteriore diventa non disponibile e non viene visualizzato nulla. Quando il buffer anteriore è nuovamente disponibile, il sistema di rendering genera l'evento IsFrontBufferAvailableChanged per notificare all'applicazione WPF. È possibile creare un gestore eventi per l'evento per riavviare il IsFrontBufferAvailableChanged rendering con una superficie Direct3D valida. Per riavviare il rendering, è necessario chiamare SetBackBuffer.

Risposta a un buffer anteriore non disponibile quando WPF esegue il fallback al rendering software

Quando si chiama l'overload SetBackBuffer(D3DResourceType, IntPtr, Boolean) con il enableSoftwareFallback parametro impostato su true, il sistema di rendering mantiene il riferimento al buffer nascosto quando il buffer anteriore diventa non disponibile, quindi non è necessario chiamare SetBackBuffer quando il buffer anteriore è nuovamente disponibile. Possono verificarsi situazioni in cui il dispositivo dell'utente non è più disponibile. In questo caso, chiamare SetBackBuffer per rilasciare il riferimento di WPF al buffer nascosto. Se è necessario reimpostare il dispositivo, chiamare SetBackBuffer con il backBuffer parametro impostato su nulle quindi chiamare SetBackBuffer di nuovo con backBuffer impostato su una superficie Direct3D valida.

Nota

Le prestazioni dipendono notevolmente dalle impostazioni della superficie Direct3D. Per altre informazioni, vedere Considerazioni sulle prestazioni per Direct3D9 e Interoperabilità WPF.

Nota

La D3DImage classe non visualizza contenuto Direct3D quando viene eseguito il rendering di WPF nel software, ad esempio tramite una connessione Desktop remoto, a meno che non si chiami SetBackBuffer(D3DResourceType, IntPtr, Boolean) e non true specifichi per il enableSoftwareFallback parametro .

Costruttori

D3DImage()

Inizializza una nuova istanza della classe D3DImage.

D3DImage(Double, Double)

Inizializza una nuova istanza della classe D3DImage con la risoluzione dello schermo specificata.

Campi

IsFrontBufferAvailableProperty

Identifica la proprietà di dipendenza IsFrontBufferAvailable.

Proprietà

CanFreeze

Ottiene un valore che indica se l'oggetto può essere impostato come non modificabile.

(Ereditato da Freezable)
DependencyObjectType

Ottiene l'oggetto DependencyObjectType che esegue il wrapping del tipo CLR di questa istanza.

(Ereditato da DependencyObject)
Dispatcher

Ottiene l'oggetto Dispatcher associato a DispatcherObject.

(Ereditato da DispatcherObject)
HasAnimatedProperties

Ottiene un valore che indica se uno o più oggetti AnimationClock sono associati a una qualsiasi delle proprietà di dipendenza di questo oggetto.

(Ereditato da Animatable)
Height

Ottiene l'altezza di D3DImage.

IsFrontBufferAvailable

Ottiene un valore che indica se un front buffer esiste.

IsFrozen

Ottiene un valore che indica se l'oggetto è attualmente modificabile.

(Ereditato da Freezable)
IsSealed

Ottiene un valore che indica se l'istanza è attualmente sealed (di sola lettura).

(Ereditato da DependencyObject)
Metadata

Ottiene i metadati associati all'origine dell'immagine.

PixelHeight

Ottiene l'altezza di D3DImage espressa in pixel.

PixelWidth

Ottiene la larghezza di D3DImage espressa in pixel.

Width

Ottiene la larghezza di D3DImage.

Metodi

AddDirtyRect(Int32Rect)

Specifica l'area del buffer nascosto che è stata modificata.

ApplyAnimationClock(DependencyProperty, AnimationClock)

Applica un oggetto AnimationClock all'oggetto DependencyProperty specificato. Se la proprietà è già animata, viene usato il comportamento di continuità di SnapshotAndReplace.

(Ereditato da Animatable)
ApplyAnimationClock(DependencyProperty, AnimationClock, HandoffBehavior)

Applica un oggetto AnimationClock all'oggetto DependencyProperty specificato. Se alla proprietà è già stata aggiunta un'animazione, viene utilizzato l'oggetto HandoffBehavior specificato.

(Ereditato da Animatable)
BeginAnimation(DependencyProperty, AnimationTimeline)

Applica un'animazione all'oggetto DependencyProperty specificato. L'animazione viene avviata quando viene eseguito il rendering del fotogramma successivo. Se alla proprietà specificata è già applicata un'animazione, viene usato il comportamento di continuità di SnapshotAndReplace.

(Ereditato da Animatable)
BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior)

Applica un'animazione all'oggetto DependencyProperty specificato. L'animazione viene avviata quando viene eseguito il rendering del fotogramma successivo. Se alla proprietà specificata è già stata aggiunta un'animazione, viene utilizzato l'oggetto HandoffBehavior specificato.

(Ereditato da Animatable)
CheckAccess()

Determina se il thread chiamante ha accesso a DispatcherObject.

(Ereditato da DispatcherObject)
ClearValue(DependencyProperty)

Cancella il valore locale di una proprietà. La proprietà da cancellare è specificata da un identificatore DependencyProperty.

(Ereditato da DependencyObject)
ClearValue(DependencyPropertyKey)

Cancella il valore locale di una proprietà di sola lettura. La proprietà da cancellare è specificata da un oggetto DependencyPropertyKey.

(Ereditato da DependencyObject)
Clone()

Crea un clone modificabile dell'oggetto D3DImage, eseguendo copie complete dei valori di tale oggetto. Durante la copia delle proprietà di dipendenza, questo metodo copia i riferimenti a risorse e le associazioni dati (che potrebbero non essere più risolti), ma non le animazioni né i relativi valori correnti.

CloneCore(Freezable)

Rende l'istanza un clone (copia completa) dell'oggetto Freezable specificato usando i valori di proprietà di base (non animati).

CloneCurrentValue()

Crea un clone modificabile dell'oggetto D3DImage, eseguendo copie complete dei valori correnti di tale oggetto. I riferimenti alle risorse, i data binding e le animazioni non vengono copiati, mentre vengono copiati i relativi valori correnti.

CloneCurrentValueCore(Freezable)

Rende l'istanza un clone (copia completa) modificabile dell'oggetto Freezable specificato usando i valori di proprietà correnti.

CoerceValue(DependencyProperty)

Assegna forzatamente il valore della proprietà di dipendenza specificata. Questa operazione viene eseguita richiamando qualsiasi funzione CoerceValueCallback specificata nei metadati della proprietà di dipendenza esistente nell'oggetto DependencyObject chiamante.

(Ereditato da DependencyObject)
CopyBackBuffer()

Crea una copia software di D3DImage.

CreateInstance()

Inizializza una nuova istanza della classe Freezable.

(Ereditato da Freezable)
CreateInstanceCore()

Quando è implementato in una classe derivata, crea una nuova istanza della classe derivata D3DImage.

Equals(Object)

Determina se l'oggetto DependencyObject specificato equivale all'oggetto DependencyObject corrente.

(Ereditato da DependencyObject)
Finalize()

Libera risorse ed esegue altre operazioni di pulizia prima che l'oggetto D3DImage venga recuperato tramite Garbage Collection.

Freeze()

Rende non modificabile l'oggetto corrente e ne imposta la proprietà IsFrozen su true.

(Ereditato da Freezable)
FreezeCore(Boolean)

Rende l'oggetto D3DImage immodificabile o determina se può essere reso immodificabile.

GetAnimationBaseValue(DependencyProperty)

Restituisce il valore non animato dell'oggetto DependencyProperty specificato.

(Ereditato da Animatable)
GetAsFrozen()

Crea una copia bloccata di Freezable, utilizzando valori delle proprietà di base (non-animati). Dato che la copia è bloccata, gli oggetti secondari bloccati sono copiati dal riferimento.

(Ereditato da Freezable)
GetAsFrozenCore(Freezable)

Rende l'istanza un clone bloccato dell'oggetto Freezable specificato usando i valori di proprietà di base (non animati).

GetCurrentValueAsFrozen()

Crea una copia bloccata di Freezable utilizzando valori della proprietà correnti. Dato che la copia è bloccata, gli oggetti secondari bloccati sono copiati dal riferimento.

(Ereditato da Freezable)
GetCurrentValueAsFrozenCore(Freezable)

Rende l'istanza corrente un clone bloccato dell'oggetto Freezable specificato. Se l'oggetto ha proprietà di dipendenza animate, i valori animati correnti vengono copiati.

GetHashCode()

Ottiene un codice hash per l'oggetto DependencyObject.

(Ereditato da DependencyObject)
GetLocalValueEnumerator()

Crea un enumeratore specializzato per determinare le proprietà di dipendenza che presentano valori impostati localmente nell'oggetto DependencyObject.

(Ereditato da DependencyObject)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
GetValue(DependencyProperty)

Restituisce il valore effettivo corrente di una proprietà di dipendenza in questa istanza di DependencyObject.

(Ereditato da DependencyObject)
InvalidateProperty(DependencyProperty)

Valuta di nuovo il valore effettivo della proprietà di dipendenza specificata.

(Ereditato da DependencyObject)
Lock()

Blocca D3DImage e consente l'esecuzione di operazioni nel buffer nascosto.

MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
OnChanged()

Chiamato quando viene modificato l'oggetto Freezable corrente.

(Ereditato da Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject)

Assicura che adatti puntatori del contesto siano stabiliti per un membro dati DependencyObjectType che è appena stato impostato.

(Ereditato da Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty)

Questo membro supporta l'infrastruttura Windows Presentation Foundation (WPF) e non deve essere usato direttamente dal codice.

(Ereditato da Freezable)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Esegue l'override dell'implementazione di DependencyObject di OnPropertyChanged(DependencyPropertyChangedEventArgs) per richiamare anche eventuali gestori Changed in risposta alla modifica di una proprietà di dipendenza di tipo Freezable.

(Ereditato da Freezable)
ReadLocalValue(DependencyProperty)

Restituisce il valore locale di una proprietà di dipendenza, se esistente.

(Ereditato da DependencyObject)
ReadPreamble()

Assicura che l’accesso di Freezable sia stato eseguito da un thread valido. Gli eredi di Freezable devono chiamare questo metodo all'inizio di qualsiasi API che legge i membri dei dati che non sono proprietà della dipendenza.

(Ereditato da Freezable)
SetBackBuffer(D3DResourceType, IntPtr)

Assegna una superficie Direct3D come origine del buffer nascosto.

SetBackBuffer(D3DResourceType, IntPtr, Boolean)

Assegna una superficie Direct3D come origine del buffer nascosto.

SetCurrentValue(DependencyProperty, Object)

Imposta il valore di una proprietà di dipendenza senza modificare l'origine del valore.

(Ereditato da DependencyObject)
SetValue(DependencyProperty, Object)

Imposta il valore locale di una proprietà di dipendenza, specificato dal relativo identificatore della proprietà di dipendenza.

(Ereditato da DependencyObject)
SetValue(DependencyPropertyKey, Object)

Imposta il valore locale di una proprietà di dipendenza di sola lettura, specificato dall'identificatore DependencyPropertyKey della proprietà di dipendenza.

(Ereditato da DependencyObject)
ShouldSerializeProperty(DependencyProperty)

Restituisce un valore che indica se i processi di serializzazione devono serializzare il valore della proprietà di dipendenza specificata.

(Ereditato da DependencyObject)
ToString()

Crea una rappresentazione di stringa dell'oggetto in base alle impostazioni cultura correnti.

(Ereditato da ImageSource)
ToString(IFormatProvider)

Crea una rappresentazione di stringa di questo oggetto in base all'oggetto IFormatProvider passato. Se il provider è null viene utilizzato l'oggetto CurrentCulture.

(Ereditato da ImageSource)
TryLock(Duration)

Tenta di bloccare D3DImage e attende per l'intervallo specificato.

Unlock()

Decrementa il conteggio dei blocchi per D3DImage.

VerifyAccess()

Impone che il thread chiamante abbia accesso a DispatcherObject.

(Ereditato da DispatcherObject)
WritePostscript()

Genera l'evento Changed per Freezable e richiama il metodo OnChanged(). Le classi che derivano da Freezable devono chiamare questo metodo alla fine di qualsiasi API che modifica i membri di classe che non sono archiviati come proprietà di dipendenza.

(Ereditato da Freezable)
WritePreamble()

Verifica che l'oggetto Freezable non sia bloccato e che l'accesso sia eseguito da un contesto di threading valido. Gli eredi di Freezable devono chiamare questo metodo all'inizio di qualsiasi API che scrive sui membri dei dati che non sono proprietà della dipendenza.

(Ereditato da Freezable)

Eventi

Changed

Si verifica quando Freezable o un oggetto che contiene è modificato.

(Ereditato da Freezable)
IsFrontBufferAvailableChanged

Si verifica quando la proprietà IsFrontBufferAvailable cambia.

Implementazioni dell'interfaccia esplicita

IFormattable.ToString(String, IFormatProvider)

Formatta il valore dell'istanza corrente usando il formato specificato.

(Ereditato da ImageSource)

Si applica a