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

L'esempio di codice seguente illustra 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 classe D3DImage gestisce due buffer di visualizzazione, denominati buffer nascosto e il buffer anteriore . Il back buffer è la superficie Direct3D. Le modifiche apportate al buffer di sfondo vengono copiate nel buffer principale quando si chiama il metodo Unlock, dove è mostrato sull'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 a eseguire il rendering in modalità software. Il metodo SetBackBuffer ha una sovraccarico che accetta un parametro che determina se WPF deve ricorrere 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 parametro enableSoftwareFallback 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 alcun elemento. Quando il buffer anteriore è nuovamente disponibile, il sistema di rendering genera l'evento IsFrontBufferAvailableChanged per notificare la tua applicazione WPF. È possibile creare un gestore eventi per l'evento IsFrontBufferAvailableChanged per riavviare il 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 parametro enableSoftwareFallback impostato su true, il sistema di rendering mantiene il riferimento al buffer posteriore quando il buffer anteriore diventa non disponibile, quindi non è necessario chiamare SetBackBuffer quando il buffer anteriore è nuovamente disponibile. Potrebbero 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 parametro backBuffer impostato su nulle quindi chiamare di nuovo SetBackBuffer con backBuffer impostato su una superficie Direct3D valida.

Note

Le prestazioni dipendono notevolmente dalle impostazioni della superficie Direct3D. Per ulteriori informazioni, consultare Considerazioni sulle prestazioni per l'interoperabilità tra Direct3D9 e WPF.

Note

La D3DImage classe non visualizza il contenuto Direct3D quando WPF esegue il rendering nel software, ad esempio tramite una connessione Desktop remoto, a meno che non venga chiamato SetBackBuffer(D3DResourceType, IntPtr, Boolean) e specificato true per il enableSoftwareFallback parametro .

Costruttori

Nome Descrizione
D3DImage()

Inizializza una nuova istanza della classe D3DImage.

D3DImage(Double, Double)

Inizializza una nuova istanza della D3DImage classe con la risoluzione di visualizzazione specificata.

Campi

Nome Descrizione
IsFrontBufferAvailableProperty

Identifica la IsFrontBufferAvailable proprietà di dipendenza.

Proprietà

Nome Descrizione
CanFreeze

Ottiene un valore che indica se l'oggetto può essere reso 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 DispatcherDispatcherObject a cui è associato.

(Ereditato da DispatcherObject)
HasAnimatedProperties

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

(Ereditato da Animatable)
Height

Ottiene l'altezza dell'oggetto D3DImage.

IsFrontBufferAvailable

Ottiene un valore che indica se esiste un buffer anteriore.

IsFrozen

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

(Ereditato da Freezable)
IsSealed

Ottiene un valore che indica se questa istanza è attualmente sealed (sola lettura).

(Ereditato da DependencyObject)
Metadata

Ottiene i metadati associati all'origine dell'immagine.

PixelHeight

Ottiene l'altezza di D3DImage, in pixel.

PixelWidth

Ottiene la larghezza di D3DImage, in pixel.

Width

Ottiene la larghezza dell'oggetto D3DImage.

Metodi

Nome Descrizione
AddDirtyRect(Int32Rect)

Specifica l'area del buffer nascosto modificato.

ApplyAnimationClock(DependencyProperty, AnimationClock, HandoffBehavior)

Applica un oggetto AnimationClock all'oggetto specificato DependencyProperty. Se la proprietà è già animata, viene utilizzato l'oggetto specificato HandoffBehavior .

(Ereditato da Animatable)
ApplyAnimationClock(DependencyProperty, AnimationClock)

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

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

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

(Ereditato da Animatable)
BeginAnimation(DependencyProperty, AnimationTimeline)

Applica un'animazione all'oggetto specificato DependencyProperty. L'animazione viene avviata quando viene eseguito il rendering del fotogramma successivo. Se la proprietà specificata è già animata, viene utilizzato il SnapshotAndReplace comportamento di handoff.

(Ereditato da Animatable)
CheckAccess()

Determina se il thread chiamante ha accesso a questo DispatcherObjectoggetto .

(Ereditato da DispatcherObject)
ClearValue(DependencyProperty)

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

(Ereditato da DependencyObject)
ClearValue(DependencyPropertyKey)

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

(Ereditato da DependencyObject)
Clone()

Crea un clone modificabile di questo D3DImage oggetto, eseguendo copie complete dei valori di questo oggetto. Quando si copiano le proprietà di dipendenza, questo metodo copia i riferimenti alle risorse e i data binding (che potrebbero non essere più risolti), ma non le animazioni o i relativi valori correnti.

CloneCore(Freezable)

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

CloneCurrentValue()

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

CloneCurrentValueCore(Freezable)

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

CoerceValue(DependencyProperty)

Forza il valore della proprietà di dipendenza specificata. A tale scopo, richiamare qualsiasi CoerceValueCallback funzione specificata nei metadati della proprietà per la proprietà di dipendenza così come esiste nella chiamata DependencyObjectdi .

(Ereditato da DependencyObject)
CopyBackBuffer()

Crea una copia software dell'oggetto D3DImage.

CreateInstance()

Inizializza una nuova istanza della classe Freezable.

(Ereditato da Freezable)
CreateInstanceCore()

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

Equals(Object)

Determina se un oggetto specificato DependencyObject è equivalente all'oggetto corrente DependencyObject.

(Ereditato da DependencyObject)
Finalize()

Libera le risorse ed esegue altre operazioni di pulizia prima che venga D3DImage recuperato da Garbage Collection.

Freeze()

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

(Ereditato da Freezable)
FreezeCore(Boolean)

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

GetAnimationBaseValue(DependencyProperty)

Restituisce il valore non animato dell'oggetto specificato DependencyProperty.

(Ereditato da Animatable)
GetAsFrozen()

Crea una copia bloccata della proprietà , utilizzando i valori della Freezableproprietà base (non animati). Poiché la copia è bloccata, tutti gli oggetti secondari bloccati vengono copiati in base al riferimento.

(Ereditato da Freezable)
GetAsFrozenCore(Freezable)

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

GetCurrentValueAsFrozen()

Crea una copia bloccata dell'oggetto utilizzando i valori correnti delle Freezable proprietà. Poiché la copia è bloccata, tutti gli oggetti secondari bloccati vengono copiati in base al riferimento.

(Ereditato da Freezable)
GetCurrentValueAsFrozenCore(Freezable)

Rende l'istanza corrente un clone bloccato dell'oggetto specificato Freezable. 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 quali proprietà di dipendenza hanno valori impostati localmente in questo DependencyObjectoggetto .

(Ereditato da DependencyObject)
GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
GetValue(DependencyProperty)

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

(Ereditato da DependencyObject)
InvalidateProperty(DependencyProperty)

Rivaluta il valore effettivo per la proprietà di dipendenza specificata.

(Ereditato da DependencyObject)
Lock()

Blocca e D3DImage abilita le operazioni sul buffer nascosto.

MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
OnChanged()

Chiamato quando l'oggetto corrente Freezable viene modificato.

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

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

(Ereditato da Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject)

Assicura che vengano stabiliti puntatori di contesto appropriati per un DependencyObjectType membro dati appena impostato.

(Ereditato da Freezable)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Esegue l'override dell'implementazione DependencyObject di OnPropertyChanged(DependencyPropertyChangedEventArgs) per richiamare anche i Changed gestori in risposta a una proprietà di dipendenza modificata 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'oggetto Freezable sia accessibile da un thread valido. Gli eredi di Freezable devono chiamare questo metodo all'inizio di qualsiasi API che legge i membri dati che non sono proprietà di dipendenza.

(Ereditato da Freezable)
SetBackBuffer(D3DResourceType, IntPtr, Boolean)

Assegna una superficie Direct3D come origine del buffer nascosto.

SetBackBuffer(D3DResourceType, IntPtr)

Assegna una superficie Direct3D come origine del buffer nascosto.

SetCurrentValue(DependencyProperty, Object)

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

(Ereditato da DependencyObject)
SetValue(DependencyProperty, Object)

Imposta il valore locale di una proprietà di dipendenza, specificato dall'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 per la proprietà di dipendenza specificata.

(Ereditato da DependencyObject)
ToString()

Crea una rappresentazione di stringa di questo 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, CurrentCulture viene utilizzato .

(Ereditato da ImageSource)
TryLock(Duration)

Tenta di bloccare e D3DImage attende la durata specificata.

Unlock()

Decrementa il conteggio dei blocchi per .D3DImage

VerifyAccess()

Impone che il thread chiamante abbia accesso a questo DispatcherObjectoggetto .

(Ereditato da DispatcherObject)
WritePostscript()

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

(Ereditato da Freezable)
WritePreamble()

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

(Ereditato da Freezable)

Eventi

Nome Descrizione
Changed

Si verifica quando l'oggetto Freezable o un oggetto che contiene viene modificato.

(Ereditato da Freezable)
IsFrontBufferAvailableChanged

Si verifica quando la IsFrontBufferAvailable proprietà viene modificata.

Implementazioni dell'interfaccia esplicita

Nome Descrizione
IFormattable.ToString(String, IFormatProvider)

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

(Ereditato da ImageSource)

Si applica a