1

我正在尝试使用 WriteableBitmap 对象,因为我需要它来旋转图像并将图像保存到我的应用程序的独立存储中。

问题是,它使用了太多内存,最终导致内存不足异常。

这是我的App的内存使用情况的图片,这里有图片链接以便更好地查看。

内存图

这是我使用 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 回答