为什么调用AForge库函数会导致C#中出现AccessViolationException?

时间:2011-07-07 13:21:51

标签: c# access-violation aforge

以下代码导致访问冲突异常 - 为什么会这样?我可以从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);
}

1 个答案:

答案 0 :(得分:0)

我试图追查这个问题。

您能否确认您的boundingR区域确实不代表整个图像?

您将收到此异常,因为在AForge端的某个位置存在错误地使用完整图像的Stride值的非托管字节副本。

我认为源自BaseInPlacePartialFilter的过滤器可以处理图片区域,但基于BaseInPlaceFilter的过滤器很可能会出现问题。

如果可行,您可以在整个图像上应用过滤器,然后仅复制您感兴趣的区域...