次の方法で共有


RenderTargetBitmap クラス

定義

XAML ビジュアル ツリーの結合コンテンツを設定できるイメージ ソースを表します。 RenderTargetBitmap で XAML ビジュアルをキャプチャできるいくつかの注目すべき制限事項を参照してください。

public ref class RenderTargetBitmap sealed : ImageSource
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 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.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class RenderTargetBitmap final : ImageSource
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class RenderTargetBitmap : ImageSource
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class RenderTargetBitmap : ImageSource
Public NotInheritable Class RenderTargetBitmap
Inherits ImageSource
継承
Object Platform::Object IInspectable DependencyObject ImageSource RenderTargetBitmap
属性

Windows の要件

デバイス ファミリ
Windows 10 (10.0.10240.0 で導入)
API contract
Windows.Foundation.UniversalApiContract (v1.0 で導入)

この基本的なコード アウトラインは、最初のシナリオの 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

このオブジェクトが関連付けられている CoreDispatcher を取得します。 CoreDispatcher は、コードが UI 以外のスレッドによって開始された場合でも、UI スレッド上の DependencyObject にアクセスできる機能を表します。

(継承元 DependencyObject)
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)

UIElement ビジュアル ツリーのスナップショットをイメージ ソースにレンダリングします。

RenderAsync(UIElement, Int32, Int32)

UIElement ビジュアル ツリーのスナップショットをイメージ ソースにレンダリングします。 scaledWidthscaledHeight の値を指定して、元のソースのレンダリング ディメンションを変更します。

SetValue(DependencyProperty, Object)

DependencyObject の依存関係プロパティのローカル値を設定します。

(継承元 DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

RegisterPropertyChangedCallback を呼び出して以前に登録した変更通知を取り消します。

(継承元 DependencyObject)

適用対象

こちらもご覧ください