Изображение PixelFormat, вызывающее AccessViolationException - PullRequest
1 голос
/ 18 октября 2019

Я использую Luxand Face SDK для простого теста. Мое приложение C # WinForms является 32-разрядным, и на него также ссылаются FaceSDK.NET.dll.

  • Windows 10 1903
  • Приложение Windows Forms
  • .NET Framework 4.8
  • 32-бит

Код просто создает объект Bitmap и пытается создать из него объект Luxand CImage. Вот код:

    private void ButtonDetect_Click (object sender, EventArgs e)
    {
        var pixelFormat = PixelFormat.Format32bppArgb;
        var luxandImageMode = Luxand.FSDK.FSDK_IMAGEMODE.FSDK_IMAGE_COLOR_32BIT;

        var bitmap = new Bitmap(100, 100, pixelFormat);
        using (var graphics = Graphics.FromImage(bitmap))
        {
            graphics.Clear(Color.Yellow);
            graphics.FillRectangle(Brushes.Red, 10, 10, bitmap.Width - (10 * 2), bitmap.Height - (10 * 2));
        }

        var data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat);
        var buffer = new byte [data.Stride * data.Height];
        Marshal.Copy(data.Scan0, buffer, 0, buffer.Length);
        bitmap.UnlockBits(data);

        var handle = 0;
        var result = 0;
        //result = Luxand.FSDK.LoadImageFromCLRImage(ref handle, bitmap);
        //result = Luxand.FSDK.LoadImageFromFile(ref handle, @"D:\Images\Test.png");
        result = Luxand.FSDK.LoadImageFromBuffer(ref handle, buffer, data.Width, data.Height, data.Stride, luxandImageMode);
    }

Код выдает AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt..

Последние три строки ВСЕГДА выдают эту ошибку независимо от того, какую комбинацию PixelFormat я использую. Странно, что даже загрузка различных Bitmaps/Jpegs/Pngs файлов изображений также приводит к той же ошибке.

Любой совет будет оценен.

ОБНОВЛЕНИЕ: Просто для примера, ятакже напрасно пробовал следующее (тот же результат):

  • 64-бит
  • Консольное приложение
  • LINQPad

Обратите внимание, чтобиблиотека должна быть активирована: Luxand.FSDK.ActivateLibrary(@"Activation Code");

...