3

多数の画像を表示するときにパフォーマンスの問題が発生していました。実際にはサイズの 1/4 未満の画像のみが必要な場合に、フル解像度の画像が使用されていたことが問題であることがわかりました。そこで、BeginInit と EndInit の間に行を追加して、DecodePixelWidth をレイアウトに必要な最大幅である 200 に設定しました。私のパフォーマンスはもはや問題ではありませんでしたが、一部の画像は非常に小さく、幅が 200 ピクセルに近くありません。ほとんどの画像は正しく表示されているように見え、小さすぎて正しく機能する韻や理由はないようです。画像の元の寸法の違いによるものかもしれないと思いましたが、結果にパターンはありませんでした.

この時点で、私はどこを見始めればよいかさえわかりません。正しい方向へのキックに本当に感謝しています.

EDIT:画像と私がそれらをどのように使用しているかについて、以下にいくつかの詳細情報があります。

ほとんどの画像は約 1000X1500 ですが、1000x1513 などの奇妙なサイズのものもあります。画像はすべてJPEGです。現在、各画像は、私が設計したカスタム ユーザー コントロールに配置されています。背景にテキストを配置するだけで、派手なものは何もありません。各ユーザー コントロールは、グリッド内の独自の行/列に配置されます。グリッドはスクロールビューア内にあるため、ユーザーはリストをスクロールできます。これは私が探しているものを達成するための最良の方法ではないかもしれませんが、私がすぐに思いついたものであり、ほとんどの場合うまくいきます. 別の表示方法に切り替えて、私が望むものをより簡単またはより簡潔な方法で達成できる場合は、喜んで切り替えます。

意図した結果は、映画閲覧アプリ用です。映画のスクロール可能なリストがあり、それぞれがタイトル、映画のポスター、ジャンル情報、評価、説明を含む独自のタイルとして表されます。このリストは、さまざまな項目で並べ替えることができます。映画に関する情報は、別のマシンの sql データベースに保存されます。イメージは元々別のマシンに保存されていますが、パフォーマンスを向上させるためにローカルにコピーされます。

編集: DecodePixelWidth を使用せず、代わりに画像のコピーを目的のサイズで保存することで問題を解決できました。これにより、パフォーマンスが向上しました。DecodePixelWidth を使用しないという Youngjae の推奨事項と、仮想化されたリストを使用するという彼の言及により、他のパフォーマンスの問題を解決する仮想化ラップ パネルの作成に関する次の一連の記事にたどり着きました。記事はSilverlight用ですが、私が理解していることから、Silverlightは基本的にwpfの骨抜きバージョンであり、Silverlightで動作する場合はwpfで動作するはずです。私の使用のためにそれを変換することはそれほど難しくないはずです。

パート 1 - MeasureOverride

パート 2 - アレンジオーバーライド

パート 3 - アニメーション

パート 4 - 仮想化

4

1 に答える 1

2

MSDN リンクでは、次のような単語を見つけることができます。

JPEG および Portable Network Graphics (PNG) コーデックは、画像を指定されたサイズにネイティブにデコードします。他のコーデックは、画像を元のサイズでデコードし、画像を目的のサイズにスケーリングします。

また、上記の理由から、サイズ変更目的で DecodePixelWidth を使用しないことをお勧めします。

元の画像のサイズと形式はわかりませんが、仮想化されたリストと<Image Width="200" Stretch="Uniform">.

于 2013-02-04T04:35:22.497 に答える