D3DImage Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Eine ImageSource, die eine vom Benutzer erstellte Direct3D-Oberfläche anzeigt.
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
- Vererbung
Beispiele
Im folgenden Codebeispiel wird gezeigt, wie sie in XAML deklarieren D3DImage . Sie müssen den System.Windows.Interop Namespace zuordnen, da er nicht in den STANDARDMÄßIGen XAML-Namespaces enthalten ist. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Hosting von Direct3D9-Inhalten 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>
Hinweise
Verwenden Sie die D3DImage -Klasse, um Direct3D-Inhalte in einer WPF-Anwendung (Windows Presentation Foundation) zu hosten.
Rufen Sie die Lock -Methode auf, um den von D3DImageangezeigten Direct3D-Inhalt zu ändern. Rufen Sie die SetBackBuffer -Methode auf, um einer Direct3D-Oberfläche zuzuweisen D3DImage. Rufen Sie die AddDirtyRect -Methode auf, um Updates auf der Direct3D-Oberfläche nachzuverfolgen. Rufen Sie die Unlock -Methode auf, um die geänderten Bereiche anzuzeigen.
Die D3DImage-Klasse verwaltet zwei Anzeigepuffer, die als Hintergrundpuffer und Frontpuffer bezeichnet werden. Der Hintergrundpuffer ist Ihre Direct3D-Oberfläche. Kopien der Änderungen am Hintergrundpuffer werden beim Aufrufen der Unlock-Methode an den Frontpuffer weitergeleitet, wo sie auf der Hardware angezeigt werden. Gelegentlich ist der Frontpuffer nicht verfügbar. Dieser Mangel an Verfügbarkeit kann durch eine Bildschirmsperre, exklusive Direct3D-Anwendungen, Benutzerwechsel oder andere Systemaktivitäten verursacht werden. Wenn dies geschieht, wird Ihre WPF-Anwendung durch die Bearbeitung des IsFrontBufferAvailableChanged-Ereignisses benachrichtigt. Wie Ihre Anwendung reagiert, wenn der vordere Puffer nicht mehr verfügbar ist, hängt davon ab, ob WPF dafür aktiviert ist, auf Software-Rendering zurückzugreifen. Die SetBackBuffer-Methode verfügt über eine Überladung, die einen Parameter verwendet, der angibt, ob WPF auf das Softwarerendering zurückgreift.
Reagieren auf einen nicht verfügbaren Frontpuffer, wenn WPF nicht auf Softwarerendering zurückfällt
Wenn Sie die SetBackBuffer(D3DResourceType, IntPtr)-Überladung oder die SetBackBuffer(D3DResourceType, IntPtr, Boolean)-Überladung mit einem auf false
gesetzten enableSoftwareFallback
-Parameter aufrufen, gibt das Rendering-System seinen Verweis auf den Hintergrundpuffer frei, wenn der Frontpuffer nicht mehr verfügbar ist und nichts angezeigt wird. Wenn der Frontpuffer wieder verfügbar ist, löst das Rendering-System das IsFrontBufferAvailableChanged-Ereignis aus, um Ihre WPF-Anwendung zu benachrichtigen. Sie können einen Ereignishandler für das IsFrontBufferAvailableChanged-Ereignis erstellen, um das Rendering mit einer gültigen Direct3D-Oberfläche neu zu starten. Um das Rendering neu zu starten, müssen Sie SetBackBuffer aufrufen.
Reagieren auf einen nicht verfügbaren Frontpuffer, wenn WPF auf Softwarerendering zurückfällt
Wenn Sie die SetBackBuffer(D3DResourceType, IntPtr, Boolean)-Überladung mit einem auf true
gesetzten enableSoftwareFallback
-Parameter aufrufen, behält das Rendering-System den Verweis auf den Hintergrundpuffer bei, wenn der Frontpuffer nicht mehr verfügbar ist. Daher muss SetBackBuffer nicht aufgerufen werden, wenn der Frontpuffer wieder verfügbar ist. Es kann Situationen geben, in denen das Gerät des Benutzers nicht mehr verfügbar ist. Rufen Sie SetBackBuffer in diesem Fall auf, um den Verweis von WPF auf den Backpuffer freizugeben. Wenn Sie Ihr Gerät zurücksetzen müssen, rufen Sie SetBackBuffer mit einem auf null
festgelegten backBuffer
-Parameter auf, und rufen Sie dann erneut SetBackBuffer auf, mit einem auf eine gültige Direct3D-Oberfläche festgelegten backBuffer
.
Hinweis
Die Leistung hängt stark von den Einstellungen der Direct3D-Oberfläche ab. Weitere Informationen finden Sie unter Überlegungen zur Leistung für die Interoperabilität zwischen Direct3D9 und WPF.
Hinweis
Die D3DImage Klasse zeigt direct3D-Inhalte nicht an, wenn WPF in Software gerendert wird, z. B. über eine Remotedesktopverbindung, es sei denn, Sie rufen auf SetBackBuffer(D3DResourceType, IntPtr, Boolean) und geben ihn für den enableSoftwareFallback
Parameter antrue
.
Konstruktoren
D3DImage() |
Initialisiert eine neue Instanz der D3DImage-Klasse. |
D3DImage(Double, Double) |
Initialisiert eine neue Instanz der D3DImage-Klasse mit der angegebenen Anzeigeauflösung. |
Felder
IsFrontBufferAvailableProperty |
Bezeichnet die IsFrontBufferAvailable-Abhängigkeitseigenschaft. |
Eigenschaften
CanFreeze |
Ruft einen Wert ab, der anzeigt, ob das Objekt als nicht änderbar festgelegt werden kann. (Geerbt von Freezable) |
DependencyObjectType |
Ruft den ab, der DependencyObjectType den CLR-Typ dieses instance umschließt. (Geerbt von DependencyObject) |
Dispatcher |
Ruft den Dispatcher ab, der diesem DispatcherObject zugeordnet ist. (Geerbt von DispatcherObject) |
HasAnimatedProperties |
Ruft einen Wert ab, der angibt, ob einer der Abhängigkeitseigenschaften dieses Objekts ein oder mehrere AnimationClock-Objekte zugeordnet sind. (Geerbt von Animatable) |
Height |
Ruft die Höhe des D3DImage ab. |
IsFrontBufferAvailable |
Ruft einen Wert ab, der angibt, ob ein Frontpuffer vorhanden ist. |
IsFrozen |
Ruft einen Wert ab, der angibt, ob das Objekt derzeit geändert werden kann. (Geerbt von Freezable) |
IsSealed |
Ruft einen Wert ab, der angibt, ob diese Instanz derzeit versiegelt (schreibgeschützt) ist. (Geerbt von DependencyObject) |
Metadata |
Ruft die Metadaten ab, die der Bildquelle zugeordnet sind. |
PixelHeight |
Ruft die Höhe des D3DImage in Pixel ab. |
PixelWidth |
Ruft die Breite des D3DImage in Pixel ab. |
Width |
Ruft die Breite des D3DImage ab. |
Methoden
AddDirtyRect(Int32Rect) |
Gibt den Bereich des Hintergrundpuffers an, der geändert wurde. |
ApplyAnimationClock(DependencyProperty, AnimationClock) |
Wendet einen AnimationClock auf die angegebene DependencyProperty an. Wenn die Eigenschaft bereits animiert wird, wird das SnapshotAndReplace-Übergabeverhalten verwendet. (Geerbt von Animatable) |
ApplyAnimationClock(DependencyProperty, AnimationClock, HandoffBehavior) |
Wendet einen AnimationClock auf die angegebene DependencyProperty an. Wenn die Eigenschaft bereits animiert wird, wird das angegebene HandoffBehavior verwendet. (Geerbt von Animatable) |
BeginAnimation(DependencyProperty, AnimationTimeline) |
Wendet eine Animation auf die angegebene DependencyProperty an. Die Animation wird gestartet, wenn der nächste Frame gerendert wird. Wenn die angegebene Eigenschaft bereits animiert wird, wird das SnapshotAndReplace-Übergabeverhalten verwendet. (Geerbt von Animatable) |
BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior) |
Wendet eine Animation auf die angegebene DependencyProperty an. Die Animation wird gestartet, wenn der nächste Frame gerendert wird. Wenn die angegebene Eigenschaft bereits animiert wird, wird das angegebene HandoffBehavior verwendet. (Geerbt von Animatable) |
CheckAccess() |
Bestimmt, ob der aufrufende Thread auf dieses DispatcherObject zugreifen kann. (Geerbt von DispatcherObject) |
ClearValue(DependencyProperty) |
Löscht den lokalen Wert einer Eigenschaft. Die Eigenschaft, deren Wert gelöscht werden soll, wird durch einen DependencyProperty-Bezeichner angegeben. (Geerbt von DependencyObject) |
ClearValue(DependencyPropertyKey) |
Löscht den lokalen Wert einer schreibgeschützten Eigenschaft. Die Eigenschaft, deren Wert gelöscht werden soll, wird durch einen DependencyPropertyKey angegeben. (Geerbt von DependencyObject) |
Clone() |
Erstellt einen änderbaren Klon des D3DImage-Objekts, indem tiefe Kopien der Werte dieses Objekts erzeugt werden. Beim Kopieren von Abhängigkeitseigenschaften kopiert diese Methode Ressourcenverweise und Datenbindungen (die möglicherweise nicht mehr aufgelöst werden können), jedoch keine Animationen oder deren aktuelle Werte. |
CloneCore(Freezable) |
Definiert die Instanz als Klon (tiefe Kopie) des angegebenen Freezable-Elements, indem Basiseigenschaftenwerte (nicht animiert) verwendet werden. |
CloneCurrentValue() |
Erstellt einen änderbaren Klon des D3DImage-Objekts, indem tiefe Kopien der aktuellen Werte dieses Objekts erzeugt werden. Ressourcenverweise, Datenbindungen und Animationen werden nicht kopiert, ihre aktuellen Werte werden jedoch kopiert. |
CloneCurrentValueCore(Freezable) |
Macht die Instanz mithilfe aktueller Eigenschaftswerte zu einem Klon (tiefe Kopie) des angegebenen Freezable-Elements, der geändert werden kann. |
CoerceValue(DependencyProperty) |
Erzwingt den Wert der angegebenen Abhängigkeitseigenschaft. Dies erfolgt durch den Aufruf einer beliebigen CoerceValueCallback-Funktion, die in den Metadaten für die Abhängigkeitseigenschaft angegeben ist, während sie beim aufrufenden DependencyObject beendet wird. (Geerbt von DependencyObject) |
CopyBackBuffer() |
Erstellt eine Softwarekopie des D3DImage. |
CreateInstance() |
Initialisiert eine neue Instanz der Freezable-Klasse. (Geerbt von Freezable) |
CreateInstanceCore() |
Erstellt beim Implementieren in einer abgeleiteten Klasse eine neue Instanz der abgeleiteten D3DImage-Klasse. |
Equals(Object) |
Bestimmt, ob ein angegebenes DependencyObject dem aktuellen DependencyObject entspricht. (Geerbt von DependencyObject) |
Finalize() |
Gibt Ressourcen frei und führt andere Bereinigungsvorgänge durch, bevor das D3DImage durch die Garbage Collection wieder freigegeben wird. |
Freeze() |
Definiert das aktuelle Objekt als nicht änderbar und legt seine IsFrozen-Eigenschaft auf |
FreezeCore(Boolean) |
Legt das D3DImage als nicht änderbar fest oder bestimmt, ob es als nicht änderbar festgelegt werden kann. |
GetAnimationBaseValue(DependencyProperty) |
Gibt den nicht animierten Wert der angegebenen DependencyProperty zurück. (Geerbt von Animatable) |
GetAsFrozen() |
Erstellt eine fixierte Kopie von Freezable mit Basiseigenschaftswerten (nicht animiert). Da die Kopie fixiert ist, werden alle fixierten Unterobjekte als Verweis kopiert. (Geerbt von Freezable) |
GetAsFrozenCore(Freezable) |
Definiert die Instanz als fixierten Klon des angegebenen Freezable-Elements, indem Basiseigenschaftenwerte (nicht animiert) verwendet werden. |
GetCurrentValueAsFrozen() |
Erstellt eine fixierte Kopie von Freezable mit aktuellen Eigenschaftswerten. Da die Kopie fixiert ist, werden alle fixierten Unterobjekte als Verweis kopiert. (Geerbt von Freezable) |
GetCurrentValueAsFrozenCore(Freezable) |
Macht diese aktuelle Instanz zu einem fixierten Klon des angegebenen Freezable-Objekts. Wenn das Objekt über animierte Abhängigkeitseigenschaften verfügt, werden die aktuellen animierten Werte kopiert. |
GetHashCode() |
Ruft einen Hashcode für diese DependencyObject ab. (Geerbt von DependencyObject) |
GetLocalValueEnumerator() |
Erstellt einen spezialisierten Enumerator, mit dem bestimmt wird, welche Abhängigkeitseigenschaften dieses DependencyObject über lokal festgelegte Werte verfügen. (Geerbt von DependencyObject) |
GetType() |
Ruft den Type der aktuellen Instanz ab. (Geerbt von Object) |
GetValue(DependencyProperty) |
Gibt den aktuellen effektiven Wert einer Abhängigkeitseigenschaft für diese Instanz eines DependencyObject zurück. (Geerbt von DependencyObject) |
InvalidateProperty(DependencyProperty) |
Wertet den effektiven Wert für die angegebene Abhängigkeitseigenschaft erneut aus. (Geerbt von DependencyObject) |
Lock() |
Sperrt das D3DImage und aktiviert Vorgänge im Hintergrundpuffer. |
MemberwiseClone() |
Erstellt eine flache Kopie des aktuellen Object. (Geerbt von Object) |
OnChanged() |
Wird aufgerufen, wenn das aktuelle Freezable-Objekt geändert wird. (Geerbt von Freezable) |
OnFreezablePropertyChanged(DependencyObject, DependencyObject) |
Stellt sicher, dass entsprechende Kontextzeiger für einen gerade festgelegten DependencyObjectType-Datenmember eingerichtet werden. (Geerbt von Freezable) |
OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) |
Dieses Member unterstützt die Windows Presentation Foundation -Infrastruktur (WPF) und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen. (Geerbt von Freezable) |
OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Überschreibt die DependencyObject-Implementierung von OnPropertyChanged(DependencyPropertyChangedEventArgs), damit in Reaktion auf eine geänderte Abhängigkeitseigenschaft des Typs Freezable auch Changed-Handler aufgerufen werden. (Geerbt von Freezable) |
ReadLocalValue(DependencyProperty) |
Gibt den lokalen Wert einer Abhängigkeitseigenschaft zurück, wenn dieser vorhanden ist. (Geerbt von DependencyObject) |
ReadPreamble() |
Stellt sicher, dass über einen gültigen Thread auf Freezable zugegriffen wird. Vererber von Freezable müssen diese Methode am Anfang jeder API aufrufen, die Datenmember liest, bei denen es sich nicht um Abhängigkeitseigenschaften handelt. (Geerbt von Freezable) |
SetBackBuffer(D3DResourceType, IntPtr) |
Weist eine Direct3D-Oberfläche als Quelle des Hintergrundpuffers zu. |
SetBackBuffer(D3DResourceType, IntPtr, Boolean) |
Weist eine Direct3D-Oberfläche als Quelle des Hintergrundpuffers zu. |
SetCurrentValue(DependencyProperty, Object) |
Legt den Wert einer Abhängigkeitseigenschaft fest, ohne deren Wertquelle zu ändern. (Geerbt von DependencyObject) |
SetValue(DependencyProperty, Object) |
Legt den lokalen Wert einer Abhängigkeitseigenschaft fest, die durch ihren Bezeichner angegeben ist. (Geerbt von DependencyObject) |
SetValue(DependencyPropertyKey, Object) |
Legt den lokalen Wert einer schreibgeschützten Abhängigkeitseigenschaft fest, die durch den DependencyPropertyKey-Bezeichner der Abhängigkeitseigenschaft angegeben ist. (Geerbt von DependencyObject) |
ShouldSerializeProperty(DependencyProperty) |
Gibt einen Wert zurück, der angibt, ob Serialisierungsprozesse den Wert der bereitgestellten Abhängigkeitseigenschaft serialisieren sollen. (Geerbt von DependencyObject) |
ToString() |
Erstellt eine Zeichenfolgendarstellung dieses Objekts auf der Grundlage der aktuellen Kultur. (Geerbt von ImageSource) |
ToString(IFormatProvider) |
Erstellt eine Zeichenfolgendarstellung dieses Objekts auf Grundlage des übergebenen IFormatProvider. Wenn der Anbieter |
TryLock(Duration) |
Versucht, das D3DImage zu sperren, und wartet den angegebenen Zeitraum ab. |
Unlock() |
Verringert die Sperrenanzahl für das D3DImage. |
VerifyAccess() |
Erzwingt, dass der aufrufende Thread auf dieses DispatcherObject zugreifen kann. (Geerbt von DispatcherObject) |
WritePostscript() |
Löst das Changed-Ereignis für das Freezable-Objekt aus und ruft dessen OnChanged()-Methode auf. Klassen, die aus Freezable abgeleitet werden, sollten diese Methode am Ende jeder API aufrufen, die Klassenmember ändert, die nicht als Abhängigkeitseigenschaften gespeichert sind. (Geerbt von Freezable) |
WritePreamble() |
Stellt sicher, dass das Freezable nicht fixiert ist und dass über einen gültigen Threadkontext darauf zugegriffen wird. Vererber von Freezable sollten diese Methode am Anfang jeder API aufrufen, die Datenmember schreibt, bei denen es sich nicht um Abhängigkeitseigenschaften handelt. (Geerbt von Freezable) |
Ereignisse
Changed |
Tritt auf, wenn Freezable oder ein darin enthaltenes Objekt geändert wird. (Geerbt von Freezable) |
IsFrontBufferAvailableChanged |
Tritt ein, wenn sich die IsFrontBufferAvailable-Eigenschaft ändert. |
Explizite Schnittstellenimplementierungen
IFormattable.ToString(String, IFormatProvider) |
Formatiert den Wert der aktuellen Instanz mit dem angegebenen Format. (Geerbt von ImageSource) |