1

Silverlight アプリケーションでフォルダーから画像を読み取るために、ファイルのストリームを使用してビットマップ イメージのソースを設定します。以下のコードを参照してください。

string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Images", String.Format("{0}.jpg", _imageName));
if (File.Exists(path))
{
    Image = new BitmapImage();
    Image.SetSource(new MemoryStream(File.ReadAllBytes(path)));
}

問題は、画像が表示されるまでに時間がかかり、大量の画像 (>400) をロードすると、メモリ不足エラーが発生する可能性があることです。URI で画像を読み込むときにこのエラーが発生したことはなく、パスから URI で画像を読み込むことができるかどうか疑問に思っていました。私が試したコード:

string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Images", String.Format("{0}.jpg", _imageName));
if (File.Exists(path))
{
    Image = new BitmapImage()
                {
                    UriSource = new Uri(path),
                    CreateOptions = BitmapCreateOptions.DelayCreation
                };
}

提供するヒントはありますか?

ありがとうございました!

フィリップ

4

3 に答える 3

0

プロパティに画像を読み込み、サイズを変更してその画像をプレビューとして設定し、フォルダから画像を破棄して次の画像に移動します。

つまり、そのフォルダに画像のサムネイルを作成して、アプリに表示する必要があります。

あなたが今していることは、すべての画像、つまりすべての大きな画像をメモリに保持することです。つまり、メモリ不足の例外が発生するのはそのためです。

于 2011-11-28T09:36:23.060 に答える
0

私の推測では、URL 経由で読み込んでいる画像よりもはるかに解像度の高いローカル ファイル システムから写真を読み込んでいると思います。

400 個をロードしたいのですが、そうです、メモリが足りなくなります。

ロード時間についてできることはあまりありません。WriteableBitmapを使用して実際のビットマップを縮小することで、メモリへの負担を軽減できる場合があります。

于 2011-11-27T23:55:48.583 に答える
0

URIで画像を読み込んでも、すべての画像が読み込まれていないことに気付きました。1.6Gig の RAM (6Gig のうち) を使用しているときに、ソフトウェアが画像の読み込みを停止しました。ストリームによる画像の読み込みとの違いは、メモリ不足に対する保護がないように見えることです。

すべての画像を表示するわけではないので (正しく読み込まれたときに 8000 枚以上の画像があることに気付きました)、表示する必要のある画像のみをメモリに読み込みます。

そのため、写真が必要になるたびに、ハード ドライブから読み込みます。画像が表示されなくなると、ガベージ コレクションによって画像が削除されます。このようにして、アプリケーションのメモリは常に約 300 MB で安定します。

于 2011-12-01T01:22:50.377 に答える