Почему вызов функции библиотеки AForge вызывает AccessViolationException в C #? - PullRequest
1 голос
/ 07 июля 2011

Следующий код вызывает исключение нарушения прав доступа - почему это так? Могу ли я вызвать фильтры AForge из блока unsafe?

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 голосов
/ 30 сентября 2011

Я пытался отследить эту проблему.

Можете ли вы подтвердить, что ваш регион boundingR действительно не представляет целое изображение?

Вы получите это исключение, потому что в какой-то момент на стороне AForge есть неуправляемая копия байтов, которая по ошибке использует значение Stride full образа.

Я считаю, что фильтры, полученные из BaseInPlacePartialFilter, будут работать с областями изображения, но фильтры, основанные на BaseInPlaceFilter, скорее всего, будут иметь проблему.

Если это возможно, вы можете применить фильтр ко всему изображению, а затем скопировать обратно только область, которая вас интересует…

...