アプリでは、ターゲットにグラフィックスを描画する必要がある場合があり、そのターゲットは即時表示を意図していません。 この種類の描画は、"オフスクリーン レンダリング" または "テクスチャへの描画" と呼ばれることもあります。 これは、たとえば、アプリの描画操作の出力をファイルに保存したり、ピクセルの配列として返したり、後の操作への入力として使用したりする場合に便利です。
Win2D はこれらのシナリオをサポートしており、 CanvasRenderTargetで簡単に行うことができます。
CanvasRenderTarget は CanvasBitmap拡張され、メソッド CreateDrawingSession()があります。 CreateDrawingSessionを使用して、グラフィックス コンテンツをCanvasRenderTargetに描画します。 次に例を示します。
CanvasDevice device = CanvasDevice.GetSharedDevice();
CanvasRenderTarget offscreen = new CanvasRenderTarget(device, width, height, 96);
using (CanvasDrawingSession ds = offscreen.CreateDrawingSession())
{
ds.Clear(Colors.Black);
ds.DrawRectangle(100, 200, 5, 6, Colors.Red);
}
Clearへのメソッド呼び出しがあることに注意してください。 これを指定しないと、ビットマップは未定義のコンテンツで初期化されます。 CanvasRenderTargetを使用して作成された描画セッションは、Win2D の XAML コントロールで作成されたものとは異なり、Clear動作の点で異なります。 描画セッションが作成されると、コントロールは常に Win2D によって自動的にクリアされます。 CanvasRenderTargets は含まれません。 これにより、アプリは CanvasRenderTargetに増分変更を加え、毎回シーン全体の再描画を回避できます。
別の描画セッションに CanvasRenderTarget を描画するには、 DrawImage(ICanvasImage) またはそのオーバーロードのいずれかを使用します。 次に例を示します。
void canvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
args.DrawingSession.DrawImage(offscreen, 23, 34);
}
または、エフェクトへの入力として CanvasRenderTarget を使用するには、効果がソースとして IGraphicsEffectSource を使用することを期待する場所に渡します。 次に例を示します。
GaussianBlurEffect blurEffect = new GaussianBlurEffect()
{
Source = offscreen,
BlurAmount = 3.0f
};
アプリは、 CanvasRenderTarget 上で描画セッションを何度も閉じて再び開くことができます。
描画操作は、描画セッション オブジェクトが破棄されるまで、 CanvasRenderTarget にコミットされません。 C# では、 using ブロックでこれを整理できます。
CanvasRenderTargetは XAML コントロールではなく、XAML ツリーをまったく含まないことを指摘する価値があります。 XAML ベースのアプリと非 XAML ベースのアプリの両方に適しています。
Windows developer