Я использую 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");