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 のサブクラスであるため、 Image 要素または ImageBrush ブラシのイメージ ソースとして使用できます。
RenderAsync を呼び出すと便利なイメージ ソースが提供されますが、レンダリング コンテンツの完全なバッファー表現は、アプリが GetPixelsAsync を呼び出すまでビデオ メモリからコピーされません。 (GetPixelsAsync を呼び出さずに) RenderAsync のみを呼び出し、レンダリングされたコンテンツのみを表示し、ピクセル データを必要としない場合は、RenderTargetBitmap を Image または ImageBrush ソースとして使用する方が高速です。 Share コントラクト交換などの DataTransferManager 操作のイメージをキャプチャする場合、またはイメージに効果を適用したり、 Windows.Graphics.ImagingAPI を使用してトランスコードしたりする場合は、ピクセル データが必要になる可能性があります。
最も頻繁に使用する RenderTargetBitmap API は RenderAsync です。 このメソッドには、 RenderAsync(UIElement) と、イメージ ソースの目的のディメンションをソース ビジュアル ツリーの自然なサイズとは異なるサイズに指定できる 別のオーバーロード という 2 つのオーバーロードがあります。 RenderAsync は設計上の非同期メソッドであるため、UI ソースとの正確なフレーム同期は保証されませんが、ほとんどのシナリオで十分に近いタイミングです。
RENDERTargetBitmap オブジェクトは、UI の表示目的で RenderTargetBitmap の便利なイメージ設定インスタンスを作成する前に、コードで RenderAsync を呼び出す必要があるため、通常は XAML UI で宣言されません。
RenderTargetBitmap を使用するコード例の詳細については、「 XAML によるビットマップへのレンダリングのサンプル」を参照してください。
RenderTargetBitmap の内容は、ビデオ ドライバーが回復の一部としてリセットされた場合など、他の下位レベルのシステムとの対話のためにまれに失われる可能性があります ( 「タイムアウト検出と回復 (TDR)」を参照)。 その場合、 CompositionTarget.SurfaceContentsLost イベントが発生します。 このケースと同様の情報損失のケースを考慮するには、アプリで CompositionTarget.SurfaceContentsLost イベントをリッスンし、 RenderAsync をもう一度呼び出して RenderTargetBitmap の内容を再レンダリングする必要があります。
RenderTargetBitmap のレンダリングされたビットマップ コンテンツは、現在の DPI 設定が変更されたときに自動的にスケーリングされません。 レンダリングされたベクター コンテンツが鮮明なままになるように、現在のビューの DPI 設定が変更されたときに、アプリで RenderTargetBitmap のコンテンツを再レンダリングする必要があります。 たとえば、ユーザーが別の DPI 設定で実行されている 2 つのモニター間でアプリを移動すると、サイズ変更が発生する可能性があります。 このようなケースを検出するには、 DisplayInformation.DpiChanged イベントをリッスンすることを検討してください。
XAML ビジュアル ツリーのレンダリングされる最大サイズは、Microsoft DirectX テクスチャの最大サイズによって制限されます。詳細については、「 リソース制限 (Direct3D 11)」を参照してください。 この制限は、アプリが実行されているハードウェアによって異なる場合があります。 この制限を超える非常に大きなコンテンツは、合わせてスケーリングされる可能性があります。 このようにスケーリング制限が適用されている場合は、 PixelWidth プロパティと PixelHeight プロパティを使用して、スケーリング後にレンダリングされるサイズに対してクエリを実行できます。 たとえば、10000 x 1,0000 ピクセルの XAML ビジュアル ツリーを 4096 x 4096 ピクセルにスケーリングできます。これは、アプリが実行されるハードウェアによって強制される特定の制限の例です。
XAML ビジュアルと RenderTargetBitmap キャプチャ機能
XAML で構成されたビジュアル コンテンツには、RenderTargetBitmap にキャプチャできないシナリオがいくつかあります。
- ツリー内にあるが、 その可視性 が [折りたたまれている ] に設定されているコンテンツはキャプチャされません。
- XAML ビジュアル ツリーに直接接続されていないコンテンツと、メイン ウィンドウのコンテンツはキャプチャされません。 これには、サブウィンドウと見なされる Popup コンテンツが含まれます。
- キャプチャできないコンテンツはキャプチャされたイメージでは空白として表示されますが、同じビジュアル ツリー内の他のコンテンツは引き続きキャプチャでき、レンダリングされます (キャプチャできないコンテンツが存在しても、その XAML コンポジションのキャプチャ全体が無効になることはありません)。
- XAML ビジュアル ツリー内にあるが、オフスクリーンのコンテンツは、表示 = が折りたたまれていない限りキャプチャできます。
コンストラクター
RenderTargetBitmap() |
RenderTargetBitmap クラスの新しいインスタンスを初期化します。 |
プロパティ
Dispatcher |
常に Windows アプリ SDK アプリで を返します |
DispatcherQueue |
このオブジェクトが |
PixelHeight |
レンダリングされたビットマップの高さをピクセル単位で取得します。 |
PixelHeightProperty |
PixelHeight 依存関係プロパティを識別します。 |
PixelWidth |
レンダリングされたビットマップの幅をピクセル単位で取得します。 |
PixelWidthProperty |
PixelWidth 依存関係プロパティを識別します。 |