gpt4 book ai didi

c# - WriteableBitmap 发生 OutOfMemoryException

转载 作者:行者123 更新时间:2023-11-30 12:10:36 27 4
gpt4 key购买 nike

我正在开发一个用于将图像上传到网络服务器的 Windows Phone 应用程序。我正在从我的设备中选择所有图像到一个列表对象。我正在将所有位图图像一张一张地转换为 byte[]。

我的代码

public byte[] ConvertToBytes(BitmapImage bitmapImage)
{
byte[] data = null;
WriteableBitmap wBitmap = null;

using (MemoryStream stream = new MemoryStream())
{
wBitmap = new WriteableBitmap(bitmapImage);
wBitmap.SaveJpeg(stream, wBitmap.PixelWidth, wBitmap.PixelHeight, 0, 100);
stream.Seek(0, SeekOrigin.Begin);
//data = stream.GetBuffer();
data = stream.ToArray();
DisposeImage(bitmapImage);
return data;
}

}
public void DisposeImage(BitmapImage image)
{
if (image != null)
{
try
{
using (MemoryStream ms = new MemoryStream(new byte[] { 0x0 }))
{
image.SetSource(ms);
}
}
catch (Exception ex)
{
}
}
}

位图到字节的转换

 using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
{
if (!store.DirectoryExists("ImagesZipFolder"))
{
//MediaImage mediaImage = new MediaImage();
//mediaImage.ImageFile = decodeImage(new byte[imgStream[0].Length]);
//lstImages.Items.Add(mediaImage);

store.CreateDirectory("ImagesZipFolder");
for (int i = 0; i < imgname.Count(); i++)
{
using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(@"ImagesZipFolder\" + imgname[i], FileMode.CreateNew,store))
//using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(@"ImagesZipFolder\text.txt" , System.IO.FileMode.OpenOrCreate, store))
{
// byte[] bytes = new byte[imgStream[i].Length];
byte[] bytes = ConvertToBytes(ImgCollection[i]);
stream.Write(bytes, 0, bytes.Length);
}
}
}
else {
directory = true;
}
}

我的模拟器中有 91 张图像。当我将所有这些位图图像转换为 byte[] 时,在 wBitmap = new WriteableBitmap(bitmapImage);

行出现以下错误

An exception of type 'System.OutOfMemoryException' occurred in System.Windows.ni.dll but was not handled in user code

Error

我该怎么做才能解决这个错误?

网络服务

如果我们向 web 服务发送大文件,是否会出现类似

的错误

An exception of type 'System.OutOfMemoryException' occurred in System.ServiceModel.ni.dll but was not handled in user code

最佳答案

What can I do to solve this error?

改变你做事的方式,使用更少的内存。

例如,不是转换每张图片然后上传它们,而是转换一张图片,上传它,再转换下一张,等等。

如果你真的想一次处理所有的图片,你可以将字节数组存储在隔离存储中而不是将它们保存在内存中,并在需要时读回它们。

基本上,重新考虑您的流程并使用存储以在给定时间使用更少的内存。

或者要求微软解除 Windows Phone 的内存限制,但这可能有点棘手。

关于c# - WriteableBitmap 发生 OutOfMemoryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17947492/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com