访问冲突-为什么在c#中调用AForge库函数会导致AccessViolationException

本文关键字:库函数 AccessViolationException AForge 调用 为什么 访问冲突 | 更新日期: 2023-09-27 18:01:39

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

访问冲突-为什么在c#中调用AForge库函数会导致AccessViolationException

我试图追踪这个问题。

你能确认你的边界r区域确实不代表整个图像吗?

你会得到这个异常,因为在AForge的某一点上,有一个非托管的字节拷贝错误地使用了完整图像的Stride值。

我相信来自BaseInPlacePartialFilter的过滤器将与图像区域一起工作,但基于BaseInPlaceFilter的过滤器最有可能有问题。

如果可行的话,你可以对整个图像应用滤镜,然后只复制你感兴趣的区域…