2016-10-14 13 views
0

コードサンプルは素晴らしいですが、この状況を処理する最良の方法についての一般的なアドバイスで十分です。UWP/Win2D - 図面をメモリに保存する

私はWin2D Canvasでイメージをレンダリングしています。画像は、まず、タイルビットマップをつなぎ合わせて大きな画像を形成することで構成されます。私はそれを "ベースイメージ"と呼ぶでしょう。

次に、さまざまな「描画」呼び出しを使用してベースイメージをマークアップし、最終イメージを作成するためにベースイメージに他のビットマップを配置します。

ユーザは、画像を任意の方向にスクロールしたり、画像を拡大または縮小したりすることができます。マウスの動きが追跡され、ツールチップのようなものがキャンバス上に表示され、ユーザーに詳細な情報を提供します。ユーザーがイメージに影響を及ぼすことがあるたびに、イメージ全体を再描画します。場合によっては、基本イメージは46,000個の小さなビットマップで構成されています。

この重いアプローチを使用しても、イメージはかなり素早く再描画されますが、これは最悪の可能性のある方法のように感じます。

私の腸は、ベースイメージを一度レンダリングし、そのイメージを保持し、必要に応じてキャンバスにコピーする必要があることを伝えます。その後、必要なビットをオーバーレイして画像を完成させます。私は、この目的のためにメモリ内のビットマップを保持する方法を示唆する資料を見つけることはできません。それが最も適切なアプローチであるかどうかも分かりません。

最も適切な行動措置に関するガイダンスや提案があれば幸いです。

ポール

答えて

2

あなたの本能かなり右ここにある - あなたが最も可能性の高い一度だけ画像を描画し、それをキャッシュされたバージョンを再利用することで、巨大な性能向上を得ることができます。

CanvasRenderTargetは、これについての方法です:https://microsoft.github.io/Win2D/html/T_Microsoft_Graphics_Canvas_CanvasRenderTarget.htmhttps://microsoft.github.io/Win2D/html/Offscreen.htmを開始点としてチェックしてください。

+0

私は以前CanvasRenderTargetクラスを見ていたと思いますが、「オフスクリーン」記事が突然それを意味するようにしました。私はそれを試してみましょう。 –

+0

これはうまくいくようです。生成されたビットマップを「オフスクリーン」リソースに簡単に構築し、必要な部分を画面上のリソースにコピーすることができます。私は限界を見つけました。オフスクリーンイメージの最大幅(と私も高さを仮定しています)は16384を超えることはできません。実際のエラーは "このデバイスのMaximumBitmapSizeInPixelsは16384です"です。これは私が必要とするサイズの約1/4ですが、作成しようとしているベースサイズが大きすぎて妥当ではないという制限もあります。 –

+0

16384 * 16384ビットマップ(32ビットのカラーフォーマットを仮定)は1 GBなので、GPUハードウェアがそのような大きな画像をサポートすることができたとしても、メモリがかなり不足することに注意してください。 –

関連する問題