2011-08-08 28 views
4

現在、Monotouchで作業しています。私は、カメラを開き、現在キャプチャされている画像を処理する必要があるアプリケーションがあります。ZxingのSystem.Drawing.Bitmapでメモリリークが発生する可能性があります。

using (var screenImage = CGImage.ScreenImage.WithImageInRect(Frame)) 
{ 
    _imageView = UIImage.FromImage(screenImage); 
    Bitmap srcbitmap = new System.Drawing.Bitmap(_imageView); 
} 

:私はhttps://github.com/reinforce-lab/com.ReinforceLab.MonoTouch.Controls/tree/master/VideoCaptureSample/

に非常によく似ているコード私のコードと彼らとの間に利害の違いが私のUIImagePickerControllerの上に配置されてOverlayView.csにしかし、私は次のコードを持っていることであるを使用していますただし、このコードを実行すると、アプリケーションが終了するまでメモリがいっぱいになります。 System.Drawing.Bitmapは決して廃棄されないようです。私はRGBLuminanceSourceに渡すビットマップのバイト[]を作成できるようにビットマップが必要ですので、ZXing.monotouchを使用しています

どのように私はきれいに再生することができますかに関するアイデア?

答えて

4

[1]のコードを使用している場合は、むしろ不完全に見えます。 AllocHGlobalから割り当てられたメモリを解放するものはありません。これはメモリ不足の状態につながります。

これはMonoTouchのバグではありません.zxingコードはBitmapクラスにIDisposableを実装し、廃棄時(またはGCがファイナライザを実行するとき)にすべてが解放されるようにします。

あなたはあなた(と、それが管理バッファにコピーされます一度アンマネージメモリを解放)画像を含むバイト[]バッファを提供する部分を貼り付け/クラス(すなわち、IDisposableインターを実装する)、またはコピーを完了することができます。

[1] https://github.com/JohnACarruthers/zxing.MonoTouch/blob/master/Bitmap.cs

+0

ありがとう、愚かな私は、私はSystem.Drawing.Bitmapはモノの一部ではなく、ZXingの一部だと思った...私はそれを修正し、その答えとしてこれをマークします一度それが働いています:) – Symmetry

+0

私はこれらの変更をZXing.monotouch githubリポジトリと併合するように見ていきますので、私たちは将来これらの問題をもう一度持ちません:) – Symmetry

関連する問題