RenderTargetBitmap 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示可以填入 XAML 視覺化樹狀結構合併內容的影像來源。 如需可在 RenderTargetBitmap 中擷取 XAML 視覺效果的一些顯著限制,請參閱。
public ref class RenderTargetBitmap sealed : ImageSource
/// [Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class RenderTargetBitmap final : ImageSource
[Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class RenderTargetBitmap : ImageSource
Public NotInheritable Class RenderTargetBitmap
Inherits ImageSource
- 繼承
- 屬性
範例
此基本程式代碼大綱會從第一個案例 XAML 和 XAML 轉譯的程式代碼改編為位圖範例。 請注意,即使是建構函式,所有程式代碼在 異步 方法內的方式。 以下是用戶按兩下以起始轉譯要求的按鈕事件處理程式。
<StackPanel>
<Button Content="Save as image source" Click="SaveImageSource_Click"/>
...
<Grid x:Name="RenderedGrid" Height="500"/>
<!--user adds child-item content to this Grid using other code, not shown-->
...
<Image x:Name="RenderedImage" Stretch="None"/>
<!-- this Image has no Source yet, will be set by a RenderTargetBitmap.RenderAsync call -->
</StackPanel>
private async void SaveImageSource_Click(object sender, RoutedEventArgs e)
{
...
RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap();
await renderTargetBitmap.RenderAsync(RenderedGrid, width, height);
RenderedImage.Source = renderTargetBitmap;
}
備註
使用 RenderTargetBitmap,您可以完成將影像效果套用至原本來自 XAML UI 組合的視覺效果、為導覽系統產生子頁面的縮圖影像,或讓使用者將 UI 的部分儲存為影像來源,然後與其他應用程式共用該影像等案例。
由於 RenderTargetBitmap 是 imageSource
呼叫 RenderAsync 提供有用的影像來源,但除非應用程式 呼叫 getPixelsAsync,否則轉譯內容的完整緩衝區表示不會複製到視訊記憶體中。 僅呼叫
您最常使用的 RenderTargetBitmap API RenderAsync。 這個方法有兩個多載:RenderAsync(UIElement),另一個多載,您可以在其中指定影像來源所需的維度,使其與來源可視化樹狀結構的自然大小不同。 RenderAsync 是設計方式的異步方法,因此無法保證與 UI 來源的確切畫面同步處理,但對於大多數案例而言,其時間不夠接近。
RenderTargetBitmap 物件通常不會在 XAML UI 中宣告,因為您必須先在程式碼中呼叫 RenderAsync,然後才有針對 UI 顯示用途而填入 RenderTargetBitmap 的實用影像填入實例。
如需使用 RenderTargetBitmap 的更多程式碼範例,請參閱 XAML 轉譯至位圖範例。
轉譯TargetBitmap 的內容可能會因為與其他較低層級系統的互動而遺失,例如,如果視訊驅動程式重設為復原的一部分(請參閱 逾時偵測和復原(TDR))。 如果發生這種情況,就會引發 CompositionTarget.SurfaceContentsLost 事件
當目前的 DPI 設定變更時,RenderTargetBitmap 的轉譯位圖內容不會自動縮放。 當目前檢視的 DPI 設定變更時,應用程式應該重新轉譯 RenderTargetBitmap 的內容,以確保轉譯的向量內容保持清晰。 例如,如果使用者在不同的 DPI 設定下執行的兩部監視器之間行動應用程式,可能會發生重設大小。 請考慮接聽 DisplayInformation.DpiChanged 事件來偵測這些案例。
XAML 可視化樹狀結構的最大轉譯大小會受限於 Microsoft DirectX 紋理的最大維度;如需詳細資訊,請參閱 資源限制 (Direct3D 11)。 此限制可能會根據應用程式執行的硬體而有所不同。 超過此限制的極大型內容可能會調整為符合。 如果以此方式套用縮放限制,則可以使用 PixelWidth 和 PixelHeight 属性來查詢縮放後的轉譯大小。 例如,10000 x 10000 像素的 XAML 可視化樹狀結構可能會縮放為 4096 x 4096 像素,這是應用程式執行的硬體強制的特定限制範例。
XAML 視覺效果和 RenderTargetBitmap 擷取功能
XAML 撰寫的視覺內容有幾個案例,您無法擷取到 RenderTargetBitmap:
- 樹狀結構中的內容,但其 Visibility 設定為 [折疊 將不會擷取。
- 不會直接連線到 XAML 可視化樹狀結構的內容,而且不會擷取主視窗的內容。 這包括 快顯 內容,這被視為像是子視窗。
- 無法擷取的內容會在擷取的影像中顯示為空白,但相同可視化樹狀結構中的其他內容仍可擷取並轉譯(無法擷取的內容不會使該 XAML 組合的整個擷取失效)。
- XAML 視覺化樹狀結構中但螢幕外的內容可以擷取,只要它不會 Visibility = Collapsed。
建構函式
RenderTargetBitmap() |
初始化 RenderTargetBitmap 類別的新實例。 |
屬性
Dispatcher |
一律會在 Windows App SDK 應用程式中傳回 |
DispatcherQueue |
取得與這個對象相關聯的 |
PixelHeight |
取得轉譯位圖的高度,以像素為單位。 |
PixelHeightProperty |
識別 PixelHeight 相依性屬性。 |
PixelWidth |
取得以像素為單位呈現的位圖寬度。 |
PixelWidthProperty |
識別 PixelWidth 相依性屬性。 |
方法
ClearValue(DependencyProperty) |
清除相依性屬性的本機值。 (繼承來源 DependencyObject) |
GetAnimationBaseValue(DependencyProperty) |
傳回為相依性屬性建立的任何基底值,這會在動畫未使用的情況下套用。 (繼承來源 DependencyObject) |
GetPixelsAsync() |
擷取先前轉譯的 RenderTargetBitmap 影像,以 BGRA8 格式的緩衝位元組數據流。 |
GetValue(DependencyProperty) |
從 DependencyObject 傳回相依性屬性的目前有效值,。 (繼承來源 DependencyObject) |
ReadLocalValue(DependencyProperty) |
如果設定本機值,則傳回相依性屬性的本機值。 (繼承來源 DependencyObject) |
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
註冊通知函式,以接聽此 DependencyObject 實例上特定 DependencyProperty 的變更。 (繼承來源 DependencyObject) |
RenderAsync(UIElement, Int32, Int32) |
將 UIElement 的快照集 可視化樹狀結構轉譯為影像來源。 指定 scaledWidth 和 scaledHeight 的值,以改變原始來源的轉譯維度。 |
RenderAsync(UIElement) |
將 UIElement 的快照集 可視化樹狀結構轉譯為影像來源。 |
SetValue(DependencyProperty, Object) |
在 DependencyObject上設定相依性屬性的本機值。 (繼承來源 DependencyObject) |
UnregisterPropertyChangedCallback(DependencyProperty, Int64) |
取消先前透過呼叫 registerPropertyChangedCallback 註冊的變更通知。 (繼承來源 DependencyObject) |