我必须在相机拍摄的图像上画一些东西。这适用于许多设备,但有时RAM太小或图片太大而且功能因OutOfMemory异常而崩溃。
我怎么能: a)优化代码以防止此异常 b)处理这个例外(使图片更小,免费拉姆等。
这是代码:
Dim from_bmp As Bitmap
Dim bmp As Bitmap
from_bmp = New Bitmap(picname)
'I also tryed this with a function which is creating the Bitmap from Filestream
'I also tryed this with the OpenNETCF.Drawing.Imaging.IImage
'If the Original Pictiure is too big, the function will crash here.
bmp = New Bitmap(from_bmp.Width, from_bmp.Height + stampheight)
'now I Create a bitmap which is higher than the original, in order to write the stamp beneth the picture
Dim font As New System.Drawing.Font("Arial", 30, FontStyle.Regular)
gr = Graphics.FromImage(bmp)
gr.DrawImage(from_bmp, 0, 0)
from_bmp.Dispose()
'here I draw somethin in the Bitmap
bmp.Save(deststring, System.Drawing.Imaging.ImageFormat.Jpeg)
gr.Dispose()
bmp.Dispose()
答案 0 :(得分:2)
我可能会为你的位图使用“使用”模式。此外,请注意,只需再次尝试(here's a diatribe为什么),通常可以克服创建位图的OOM。我敢打赌,GC堆太满了,第二次请求,特别是收集后,会成功。
我将完成剩下的代码(未显示)并确保所有其他图形对象正确处理 - CF不能很好地处理图形对象的本机资源的自动清理并且经常需要一些帮助(再次,请参阅上面的链接)。