![](/img/trans.png)
[英]When is System.Drawing.Bitmap not System.Drawing.Bitmap?
[英]Possible memory leak in Zxing's System.Drawing.Bitmap
我目前正在使用Monotouch。 我有一个应用程序打开相机,然后需要处理当前正在捕获的图像。 我使用的代码非常类似于https://github.com/reinforce-lab/com.ReinforceLab.MonoTouch.Controls/tree/master/VideoCaptureSample/
我的代码和他们的代码之间的兴趣不同是在OverlayView.cs中放置在我的UIImagePickerController上但是,我有以下代码:
using (var screenImage = CGImage.ScreenImage.WithImageInRect(Frame))
{
_imageView = UIImage.FromImage(screenImage);
Bitmap srcbitmap = new System.Drawing.Bitmap(_imageView);
}
但是,运行此代码将导致内存不断填满,直到应用程序关闭。 似乎从未处理过System.Drawing.Bitmap。 我正在使用ZXing.monotouch所以我需要位图,以便我可以创建位图的bytes []以传递给RGBLuminanceSource
关于我如何能够很好地发挥这一点的任何想法?
如果您使用的是[1]中的代码,那么它看起来相当不完整。 什么都没有释放从AllocHGlobal分配的内存,这将导致内存不足的情况。
这不是MonoTouch错误 - zxing代码应该在Bitmap类上实现IDisposable,并确保在处理时(或GC运行其终结器时)释放所有内容。
您可以完成类(即实现IDisposable)或复制/粘贴为您提供包含图像的byte []缓冲区的部分(并在将非托管内存复制到托管缓冲区后释放它)。
[1] https://github.com/JohnACarruthers/zxing.MonoTouch/blob/master/Bitmap.cs
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.