問題タブ [win2d]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 連続するイベント呼び出しをマージするC#/WPF
Win2D はこの関数Invalidate()
を特徴としており、呼び出されるとコントロール全体が再描画され、連続する急速な呼び出しでは、以前の呼び出しからの変更を含む 1 つの更新にマージされます。これを自分のアプリケーションで再作成しようとしていますが、この説明と完全に一致するフレームワークが見つかりません。
チャートをクリックするたびに、線が追加されます。私がやりたいことは、誰かが連続して 100 回クリックした場合、一度に 1 つずつ追加するのではなく、クリックが完了するまで待機してすべての行を一度に追加することです。同様に、ウィンドウのサイズ変更は、イベントが発生するたびにではなく、一度だけチャートを再描画する必要があります。
を使用してみSystem.Reactive
ましたが、それらのマージ/スロットリングのほとんどは以前の呼び出しを無視しているようで、OnCompleted()
「完了」しないため、イベントで Subscribe の一部を使用できません。
このような問題を解決した経験のある人はいますか? タイマーを使用して一種の遅延を作成することを検討していますが、説明どおりに機能するものが既にあるかどうかを知りたいです。
c# - バイト配列を PixelShaderEffect に渡す
C#/UWP/Win2D アプリケーションで、非標準のピクセル形式に基づくファイルから画像をすばやくアニメーション化しています。画像間に相関関係はありますが (フリップブック アニメーションを考えてください)、プログラム的なものはありません。
プロトタイプを作成し、以下の関連コードを含めました。「白」と「黒」の色は最終的に色のルックアップ テーブルに変換されます (例: 5 = 白)
FrameWidth/FrameHeight が 512 の場合、パフォーマンスは 60 FPS まで良好ですが、1024 では 30 FPS まで低下します。それよりも大きいと、パフォーマンスがさらに低下します。
これを大きなデータでプロファイリングすると、色配列のループと SetPixelColors 呼び出しがボトルネックであることがわかります。
これを高速化するためにいくつかの方法 (PLINQ、Parallel.ForEach、データの事前キューイング) を試しましたが、上記の形式よりも高速化できませんでした。
これを処理する正しい方法は、CanvasRenderTarget でサポートされている DirectXPixelFormat の新しいタイプを作成して、SetPixelBytes を使用できるようにすることだと思います。それは不可能に思えます。
次の正しいオプションは、frameBytes を受け入れる PixelShaderEffect を記述し、グレースケールでピクセルを作成し、それを別の効果のソースとして使用して色を設定することです。
IGraphicsEffectSource を作成する例を見つけることができませんでした。
アドバイス、ドキュメント、または何よりも、「これは、バイト配列を PixelShaderEffect に渡す方法です」という作業は大歓迎です。