访问冲突-为什么在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);
}
我试图追踪这个问题。
你能确认你的边界r区域确实不代表整个图像吗?
你会得到这个异常,因为在AForge的某一点上,有一个非托管的字节拷贝错误地使用了完整图像的Stride
值。
我相信来自BaseInPlacePartialFilter
的过滤器将与图像区域一起工作,但基于BaseInPlaceFilter
的过滤器最有可能有问题。
如果可行的话,你可以对整个图像应用滤镜,然后只复制你感兴趣的区域…