У вас есть структура, которая принимает массив байтов
byte[]
однако размер этого массива зависит от изображения, которое вы отправляете (ширина x высота)
Итак... как дела?
[MarshalAs(UnmanagedType.ByValArray, SizeConst = ???)]
public Byte[] ImageData;
Является ли sizeconst ДОЛЖНЫ ИМЕТЬ при работе с байтовыми массивами, передаваемыми из С# в C dll?