我使用c#.net CF 2.0为Symbol MC75A创建软件。我们扫描条形码并返回股票信息,但我正在尝试添加从网址获取图像的功能。每次扫描都会使用数据库中的新数据刷新屏幕,并从新网址获取图像。它扫描几个条形码并返回可能没有问题的4/5图像然后突然发生OutOfMemoryException。用于获取图像的代码是:
public Bitmap GetImage(string URL)
{
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(URL);
myRequest.Method = "GET";
myRequest.AllowWriteStreamBuffering = false;
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(myResponse.GetResponseStream());
myResponse.Close();
return bmp;
}
被叫:
pbImage.Image = GetImage(ProductImage);
pbImage.SizeMode = PictureBoxSizeMode.StretchImage;
我尝试使用pbImage.Image.Dispose()在每次新GET之前处理图像,但仍然得到相同的异常。图像大小介于100KB和550KB之间。无论它是否有所不同,图像尺寸总是超过1000px。
我是否在重新获取之前错过了正确的处理方式,或者是否以某种方式缓存了所有这些图像,然后创建了一个outofMemory异常?
答案 0 :(得分:2)
我找到了解决方案:
OutOfMemoryException loading big image to Bitmap object with the Compact Framework
似乎是解压缩2000px图像时的system.drawing,它正在创建一个未压缩的图像,在内存中提供更大的大小而异常。该解决方案显示了获取图像缩略图而非整个图像的方法。
再次感谢您的帮助。
答案 1 :(得分:0)
只是有人可以访问图像位置。对我来说更好的解决方法是创建一个名为resize.aspx的网页,并从页面填充图片文件夹作为参数。现在该页面(位于与图像位于同一位置的服务器上)能够调整图像大小并返回一个小的300x300px图像。似乎是我能想到的最好的解决方案。如果您将图像的完整URL传递到另一个页面并且该页面返回所需的缩略图,这也适用于任何URL的图像。