1

次のコードはアクセス違反の例外を引き起こします - なぜですか? unsafeブロック内から AForge フィルターを呼び出すことはできますか?

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);
}
4

1 に答える 1

0

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

あなたのboundingR領域が実際に画像全体を表していないことを確認できますか?

この例外が発生するのは、AForge 側のある時点で、完全なイメージのStride値を誤って使用するバイトの管理されていないコピーがあるためです。

から派生しBaseInPlacePartialFilterたフィルターは画像領域で機能すると思いますが、に基づくフィルターにBaseInPlaceFilterはおそらく問題があります。

可能であれば、画像全体にフィルターを適用してから、関心のある領域だけをコピーして戻すことができます…</p>

于 2011-09-30T19:33:18.853 に答える