1

画像を回転させ、アプリの分離ストレージに画像を保存するために必要なため、WriteableBitmap オブジェクトを使用しようとしています。

問題は、大量のメモリを使用するため、最終的にメモリ不足の例外が発生することです。

これは、私のアプリのメモリ使用量の写真です。見やすいように、ここに写真のリンクがあります。

メモリーチャート

WriteableBitmap を使用する場所の例を次に示します。

        WriteableBitmap picture = new WriteableBitmap(PictureCanvas, null);

        using (var memoryStream = new MemoryStream())
        {
            picture.SaveJpeg(memoryStream, picture.PixelWidth, picture.PixelHeight, 0, 100);

            using (var myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
            {
                using (IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(Globals.OVERLAY_FILE_NAME, FileMode.Create, myIsolatedStorage))
                {
                    fileStream.Write(memoryStream.ToArray(), 0, memoryStream.ToArray().Length);
                    fileStream.Close();
                }
            }
        }

        picture = picture.Crop(0, 0, 1, 1);

画像をトリミングしてメモリの消費を抑えようとしましたが、何もしません。

私はここで WriteableBitmap 拡張ライブラリを使用しています。フロント ページでは Dispose() メソッドについて言及していますが、アプリには表示されません。

誰かがこの問題を回避する方法を教えてくれたり、可能な解決策を見つけることができる場所を教えてくれたりしたら、それは素晴らしいことです!

4

1 に答える 1

1

私は同様の問題を抱えており、まだ調査中ですが、少なくとも私が与えることができる小さなヒント: 可能であれば、MemoryStream を取り除き、次のように fileStream に直接書き込みます:

    WriteableBitmap picture = new WriteableBitmap(PictureCanvas, null);
    using (var myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
    using (IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(Globals.OVERLAY_FILE_NAME, FileMode.Create, myIsolatedStorage))
    {
        picture.SaveJpeg(fileStream, picture.PixelWidth, picture.PixelHeight, 0, 100)
    }

これでメモリが買えるはずです。

于 2013-10-16T19:19:19.180 に答える