我有这段代码:
if (archivoBinario != null)
{
MemoryStream ms = new MemoryStream(archivoBinario);
Bitmap imagen = new Bitmap(ms);
PicBoxImagen.Image = imagen;
}
当从MemoryStream创建一个新的位图ms时,它会抛出一个System.OutOfMemoryException。
注意:archivoBinario是一个字节数组,其大小为9778字节。
我认为记忆的大小并不是问题所在。有什么建议吗?
图像由WCF服务发送到设备并存储在SQL Server CE 3.1数据库中。也许在发送图像时可能会出现问题。
我已经比较了表示存储在SQL Server 2005中的图像的字节和存储在SQL Server CE中的图像,并且是相同的。
谢谢!
答案 0 :(得分:1)
如果在分配新图像之前它不为null,则必须调用PicBoxImagen.Image上的Dispose。如果你不这样做,你就会有泄漏。有关原因的详细解释,请参阅this blog entry。
答案 1 :(得分:1)
Image
类会抛出OOM,包括无效格式。要检查您的基础,请确保它是有效的图像。将这些9778字节保存到文件并尝试查看(在CF和/或普通PC上)。
但是9 kB压缩图像可能会爆炸,因此它仍然可能是真正的OOM。
答案 2 :(得分:0)
创建图像有时会为内存以外的资源抛出OutOfMemoryException
(容易引起混淆)。
您是否有可能没有处置Windows窗体句柄?
另一种可能性是你真的 内存不足 - 例如,一个小文件仍然可以代表一个巨大的图片(例如,如果它只是一种颜色)。如果Windows尝试创建图像的内存中逐像素表示,则可能会显示相同的症状。像素的大小是多少?