0

freedraw を含むペイントのような機能を含む Silverlight Web サイトを作成しています。これを実現するために、次の Web サイトで説明されている手法を使用しました: http://codeding.com/articles/freehand-drawing-in-silverlight

問題は、デモ プロジェクトを実行すると、ほんの数秒描画しただけで極端に遅くなり始めることです。しかし、それはおそらくこの技術が必要とする形状の量が原因であることを認識しています。これが私の主な質問です。

正確に同じコードを持つはずのローカルプロジェクトがすぐに遅れるのに、Webサイトのデモはどれだけ描いても遅れないのですか?

キャンバスの全体的なパフォーマンスを改善する方法を見つけようとしましたが、唯一見つかったのは、描画を静止画像に変えることだけでした。元に戻す/やり直し機能を使用しているため、これはあまり理想的ではありません。

4

1 に答える 1

0

に追加された形状の数がCanvas遅れの理由であってはなりません。元に戻す/やり直し機能のために図面を画像に変換するなどの何かが必要です。元に戻す/やり直しの場合、画像の代わりにストローク情報を保存できます。各元に戻す/やり直し操作中に画像を作成および保存すると、大量のメモリが消費されます。

ストロークは、開始 (マウスダウン イベント) から終了 (マウスアップ イベント) までの一連の点に他ならず、一連のストロークが完全な描画を形成します。保存されたストローク情報を使用して、いつでも描画を再作成できます (画像を使用して再作成できるのと同じように)。完全な図面を保存するような単純なデータ構造を使用できますList<List<Point>>。これは、画像自体を作成して保存する代わりに、メモリ効率が非常に高くなります。

于 2013-04-09T13:26:56.120 に答える