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 回答