問題タブ [rendertargetbitmap]
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.
xaml - RenderTargetBitmap が WebView のスケーリングを台無しにする
RenderTargetBitmap.RenderAsync のオーバーロードが WebView のスケーリングをめちゃくちゃにする非常に単純な再現ケースがあります。MainPage にあるのは、WebView とボタンだけです。
コード ビハインドには単純なイベント ハンドラしかありません
RenderAsync を呼び出す前のページは次のようになります。
そして、これは呼び出し後に何が起こるかです:
これを防ぐ理由と方法はありますか?私が電話した場合にのみ発生することに注意してください
しかし、スケーリングなしでオーバーロードを呼び出す場合はそうではありません
編集:私が受け取った最初の回答により、ここでアスペクト比が問題ではない理由を明確にしたいと思いましたが、実際に問題があることを証明する目的のみに役立ちます。次のシナリオを考えてみましょう - 低解像度のスクリーンショットだけが必要な非常に高い DPI 画面 - 正しい比率で縮小しても、WebView は台無しになります。また、私のシナリオでは、後でスクリーンショットを手動でサイズ変更することはできません。スケーリングされた寸法を使用した RenderAsync オーバーロードははるかに高速であり、その方法を使用することを本当に好みます。
c# - WPF ビジュアルをビットマップに非同期的にレンダリングする
私は、WinRT RenderTargetBitmap が "RenderAsync(visual);" を介して Visual を非同期的にレンダリングできることを確認しました。方法。残念ながら、.net RendertargetBitmap には RenderAsync メソッドがありません。.net RenderTargetBitmap が WPF ビジュアルの非同期レンダリングを許可するための回避策または拡張機能はありますか? 事前に助けてくれてありがとう!
c# - 「空の」ファイルを作成する PngBitmapEncoder
データを表示する DVC チャートがあります。グラフをエクスポートするボタンを作成しました。
コードは次のとおりです。
したがって、私の問題は、ファイルが基本的に空であることを除いて、これが適切に実行されることです。サイズが1KBのファイルしかなく、グラフはありません。
MSDN のドキュメントやその他のスタック オーバーフローの例を見てきました。それらはすべてこの形式に従っており、人々はそれが機能すると主張しています. デバッガーで実行したところ、renderBitmap オブジェクトは必要なすべてのプロパティで正しい高さと重量の値を取得しています。何か案は?
c# - 凍結できない凍結可能オブジェクトを凍結する方法
私のシナリオでは、バックグラウンド タスクでレンダリングする前に、変更されていない BitmapCacheBrush をフリーズしたいと考えています。残念ながら、「この Freezable は凍結できません」というエラーが表示されます。フリーズ可能なオブジェクトではなくフリーズする回避策やハッキーな方法はありますか? この目標を達成するために、リフレクションを介して適切なプロパティを設定することは可能でしょうか? よろしくお願いします。
編集:(要求された私のサンプルコード)
c# - 表示されていない UserControl のスナップショットを作成する
まだ表示されていない UserControl のスナップショットを撮りたいです。それが私のコードです:
このコードは、アプリの起動時に「MyViewModel」ごとに実行されます。「MyViewModel」には、タブのコンテンツである「SubViews」のリストが含まれており、「F1」から「F12」を使用してボタンをアクティブにできる「FunctionKeyBar」が含まれています。しかし、スクリーンショットを作成した後、F1 から F12 を使用できなくなりました。また、言語の切り替えなど、他の問題もあります。表示されていないコントロールのスナップショットを作成する別の方法はありますか?
すべての返信に感謝します。
こんにちはベニー
c# - アプリがフォアグラウンドにない場合、RenderTargetBitmap.GetPixelsAsync() は HResult 0x80004005 "Unspecified error" をスローします
アプリの Suspending イベントで RenderTargetBitmap を保存しています。アプリを開いて、Visual Studio で [サスペンドとシャットダウン] をクリックすると、すべて問題ありません。しかし、最初にスタート画面に移動するか、別のアプリを開いてしばらく待つと、つまり、アプリがフォアグラウンドにない場合、RenderTargetBitmap.GetPixelsAsync() メソッドは、HResult 0x80004005 と「特定できないエラー」の説明でこの COMException をスローします。実際の使用では、ユーザーがアプリから別のアプリに切り替えたときに中断が発生することを考えると、このエラーはほとんど常に発生します。definetelly で保存している RenderTargetBitmap は、この時点では null ではありません。これは、確認しているためです。
また、開発中に、アプリから別のアプリに切り替えてから元に戻すと、アプリが中断されずにすぐに開いた場合でも、一部の画像がガベージ コレクションのように UI に表示されないことに気付きました。まだ参照されていることを考えると、これはかなり奇妙です。上記の問題に関連しているかどうかはわかりませんが、可能性のようです。
誰かが同様の問題を経験しましたか? アプリが画面から消えたときに、これらの画像で正確に何が起こっているのでしょうか?
編集:
ここに例があります。Xaml:
コードビハインド:
モバイルでアプリを起動し、「レンダリング」ボタンをクリックします。その後、[スタート] を押してアプリを画面から外し、しばらく (10 秒で十分です) 待ってから、Visual Studio の [デバッグの場所] バーにある [中断してシャットダウン] を押します。COMException を観察します。
wpf - WPF RenderTargetBitmap がバックグラウンド スレッドの変更からバインディング値を更新したことを確認する
バックグラウンド スレッドでバインドされたプロパティを変更した後、更新されたレンダリングを一貫して取得できないという点で、RenderTargetBitmap に問題があります。
ここに私が持っているものがあります:
残念ながら、コントロールが新しい値で更新される前にレンダリングを取得している時間の約半分と、正しく更新されている残りの半分です。
私が理解していることから、WPF はプロパティ変更通知を UI スレッドに自動的にディスパッチします。レンダリングを実行する前に、これらのディスパッチされた通知がすべて処理されるようにするにはどうすればよいですか? Dispatcher スレッドで更新されていることを確認すれば、このコードは正常に機能しSomeBoundProperty
ますが、この特定のアプリケーションには理想的とは言えません。
助言がありますか?
c# - RenderTargetBitmap がメモリ不足を引き起こす
この問題でスレッドが回っているのを見たことがありますが、問題の解決策が見つからないようです。ユーザーが独自のキャンバスを作成できるアプリケーションがあります。この例では、ユーザーが 745px x 1045px のキャンバスを 150 個作成するとします。現在、ユーザーがこれらすべてを個別の PNG ファイルにエクスポートできる機能があります。これを行う私の方法は次のとおりです。
約 45 個の画像の後、アプリケーションは次の行で中断します: renderBitmap.Render(surface); 発言: プログラムの実行を続行するにはメモリが不足しています。
これで、このプロセスが少しメモリを浪費する可能性があることを理解しましたが、画像がレンダリングされて PNG としてエクスポートされた後、次の画像に進む前に何らかの形で破棄できるはずです。どうすればいいのかわかりません。どんなアドバイスでも大歓迎です!
c# - Image を ImageSource に変換する方法
正しい質問をしているかどうかさえわかりません。前もってお詫び申し上げます。いくつかの PNG をキャンバスに書き込んでいますが、同時に PNG をビットマップにコピーしたいと考えています。PNG がキャンバス上と同じ場所にビットマップ上に表示されるようにします。
これはコード スニペットです。
ただし、「この行で「System.Windows.Controls.Image」から「System.Windows.Media.ImageSource」に変換できません」というエラーがスローされます。
何らかの方法で画像を ImageSource に変換できれば、このエラーは解決しますか、それともすべて間違っていますか?
ありがとう!