D3DImage 類別
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
顯示使用者建立之 Direct3D 介面的 ImageSource。
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
- 繼承
下列程式碼範例示範如何在 XAML 中宣告 D3DImage 。 您必須對應 System.Windows.Interop 命名空間,因為它不包含在預設 XAML 命名空間中。 如需詳細資訊,請參閱 逐步解說:在 WPF 中裝載 Direct3D9 內容。
<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>
使用 類別 D3DImage 在 Windows Presentation Foundation (WPF) 應用程式中裝載 Direct3D 內容。
Lock呼叫 方法來變更 所 D3DImage 顯示的 Direct3D 內容。 SetBackBuffer呼叫 方法,將 Direct3D 表面指派給 D3DImage 。 AddDirtyRect呼叫 方法來追蹤 Direct3D 介面的更新。 Unlock呼叫 方法以顯示變更的區域。
類別 D3DImage 會管理兩個顯示緩衝區,稱為 後端緩衝區 和 前端緩衝區。 後端緩衝區是您 Direct3D 表面。 當您呼叫 Unlock 方法時,後端緩衝區的變更會向前複製到前端緩衝區,其會顯示在硬體上。 有時候,前端緩衝區會變成無法使用。 這種可用性不足的原因可能是螢幕鎖定、全螢幕獨佔 Direct3D 應用程式、使用者切換或其他系統活動所造成。 發生這種情況時,您的 WPF 應用程式會透過處理 IsFrontBufferAvailableChanged 事件來收到通知。 您的應用程式如何回應前端緩衝區變成無法使用,取決於 WPF 是否能夠回復至軟體轉譯。 方法 SetBackBuffer 具有多載,其會採用參數,指定 WPF 是否回復為軟體轉譯。
當您呼叫 SetBackBuffer(D3DResourceType, IntPtr) 多載或呼叫 SetBackBuffer(D3DResourceType, IntPtr, Boolean) 參數設定 false
為 的多載 enableSoftwareFallback
時,轉譯系統會在前端緩衝區變成無法使用且不會顯示任何內容時,釋放其後端緩衝區的參考。 當前端緩衝區再次可供使用時,轉譯系統會 IsFrontBufferAvailableChanged 引發 事件來通知 WPF 應用程式。 您可以為事件建立事件處理常式, IsFrontBufferAvailableChanged 以使用有效的 Direct3D 表面重新開機轉譯。 若要重新開機轉譯,您必須呼叫 SetBackBuffer 。
當您使用 參數設定為 呼叫 SetBackBuffer(D3DResourceType, IntPtr, Boolean) 多載 enableSoftwareFallback
時,轉譯系統會在前端緩衝區變成無法使用時,保留其後端緩衝區的參考,因此當前端緩衝區再次可用時,就不需要呼叫 SetBackBuffer 。 true
在某些情況下,使用者裝置可能會變成無法使用。 發生此情況時,請呼叫 SetBackBuffer 以釋放對後端緩衝區的 WPF 參考。 如果您需要重設裝置,請呼叫 SetBackBufferbackBuffer
參數設為 null
,然後再次呼叫 SetBackBuffer , backBuffer
並將 設定為有效的 Direct3D 介面。
備註
效能取決於 Direct3D 介面的設定。 如需詳細資訊,請參閱 Direct3D9 和 WPF 互通性的效能考慮。
備註
D3DImage除非您呼叫 SetBackBuffer(D3DResourceType, IntPtr, Boolean) 並指定 true
enableSoftwareFallback
參數,否則當 WPF 在軟體中轉譯時,類別不會顯示 Direct3D 內容,例如透過遠端桌面連線。
D3DImage() |
初始化 D3DImage 類別的新執行個體。 |
D3DImage(Double, Double) |
使用指定的顯示解析度,初始化 D3DImage 類別的新執行個體。 |
Can |
取得值,指出是否可以將物件設為不可修改。 (繼承來源 Freezable) |
Dependency |
取得包裝 DependencyObjectType 這個實例 CLR 型別的 。 (繼承來源 DependencyObject) |
Dispatcher |
取得與這個 Dispatcher 關聯的 DispatcherObject。 (繼承來源 DispatcherObject) |
Has |
取得值,這個值表示是否有一個或多個 AnimationClock 物件與這個物件的任何一個相依性屬性相關聯。 (繼承來源 Animatable) |
Height |
取得 D3DImage 的高度。 |
Is |
取得指出前景緩衝區是否存在的值。 |
Is |
取得值,該值表示物件目前是否可修改。 (繼承來源 Freezable) |
Is |
取得值,這個值表示此執行個體目前是否已密封 (唯讀)。 (繼承來源 DependencyObject) |
Metadata |
取得與影像來源關聯的中繼資料。 |
Pixel |
取得 D3DImage的高度,以像素為單位。 |
Pixel |
取得 D3DImage 的寬度,以像素為單位。 |
Width |
取得 D3DImage 的寬度。 |
Changed |
發生於 Freezable 或所含的物件遭到修改時。 (繼承來源 Freezable) |
Is |
發生於 IsFrontBufferAvailable 屬性變更時。 |
IFormattable. |
使用指定的格式,格式化目前執行個體的值。 (繼承來源 ImageSource) |
產品 | 版本 |
---|---|
.NET Framework | 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1 |
Windows Desktop | 3.0, 3.1, 5, 6, 7, 8, 9 |