2011-07-07 8 views
1

次のコードはアクセス違反の例外を引き起こします - それはなぜですか? unsafeブロック内からAForgeフィルターを呼び出すことはできますか?なぜAForgeライブラリ関数を呼び出すとC#でAccessViolationExceptionが発生するのですか?

unsafe 
{ 
    BitmapData bmd = ThresholdedImage.LockBits(boundingR, ImageLockMode.ReadWrite, ThresholdedImage.PixelFormat); 
    BitmapData bmda = intersectResult.LockBits(
     new Rectangle(0, 0, intersectResult.Width, intersectResult.Height), 
     ImageLockMode.ReadWrite, 
     intersectResult.PixelFormat); 


    intersectResult = intersectFilter.Apply(bmd); //causes exception here 
    ImageStatistics st = new ImageStatistics(intersectResult); 
    area = st.PixelsCountWithoutBlack; 

    intersectResult.UnlockBits(bmda); 
    ThresholdedImage.UnlockBits(bmd); 
} 
+0

それは例外またはアクセス違反が発生しますか?どちらでもかまいません – sehe

+0

@sehe:「AccessViolationExceptionが処理されていません」と表示されるので、可能でなければなりません。 – Lukas

+0

Thx。つまり、例外が発生します。アンマネージドコードを扱う場合、アクセス違反は完全に可能で、** [this](http://img262.imageshack.us/img262/7761/mediamonkeyerror.png)** – sehe

答えて

0

この問題を追跡しようとしました。

あなたのバウンディングR領域が実際にイメージ全体を表していないことを確認できますか?

AForge側のいくつかの点で誤ってフル画像のStride値を使用してバイトのアンマネージドコピーがあるため、この例外が発生します。

BaseInPlacePartialFilterから派生したフィルタは画像領域では機能しますが、BaseInPlaceFilterに基づくフィルタで問題が発生する可能性が高いと思います。

それはあなたが画像全体にフィルタを適用することが可能だと、あなたが興味を持っているだけで地域をバックコピーした場合...

+0

ご回答有難うございます。私はそれを行う別の方法を見つけ、問題はもう見えないようです。しかし、私はあなたの提案をテストしようとします。 – Lukas

関連する問題