Я извлекаю ряды пикселей из изображения в массив int, используя Marshal.Copy. Все работает нормально, пока я не достигну последней строки изображения. Если я попытаюсь извлечь его, я получу хорошее исключение:
System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
Вот небольшой тестовый пример, который воспроизводит ошибку. Что я делаю не так?
[Test]
public void testMarshalCopy() {
Bitmap image = new Bitmap("../../TestResources/barcode.jpg");
int left = 0;
int top = image.Height - 1;
int width = image.Width;
int height = 1;
Rectangle zone = new Rectangle(left, top, width, height);
BitmapData data = image.LockBits(zone, System.Drawing.Imaging.ImageLockMode.ReadOnly, image.PixelFormat);
IntPtr pointer = data.Scan0;
int[] pixels = new int[width * height];
Marshal.Copy(pointer, pixels, 0, pixels.Length); // throws System.AccessViolationException
image.UnlockBits(data);
}