Я работаю над простым программным обеспечением для создания изображений для своего университета, и я столкнулся с раздражающей проблемой при получении изображения с камеры. Существует .dll COM библиотека для камеры Apogee Alta U57 (Библиотека и документация здесь: http://www.ccd.com/downloads.html) и есть два возможных способа получения изображения с камеры (при условии, что изображение готово):Получение изображений из регистров камеры
с помощью " ICamera2 camera.image "который возвращает
" возвращает 2D SAFEARRAY, типа LONG (4 байта на элемента) или INTEGER (2 байта на элемент), который содержит данные изображения. Тип данных (LONG или INTEGER) Возврат контролируется соответствующим свойством ConvertShortToLong. "
с помощью "ICamera2.GetImage (Int pImageBuffer)", который описан как:
Возвращает указатель на 16 бит без знака, короткие данные, расположенные в памяти . Область данных изображения должна быть назначена приложением до вызова этого метода.
И я довольно хорошо запутаться при использовании второго метода, так как INT! = INT *, , и я действительно не знаю, как передать POINTER TO 16 BIT USHORT. Мой упрощенный метод получения изображения выглядит следующим образом:
public unsafe uint[] getImage(int width, int height)
{
// Allocating array of image size (width * height)
// where pixel is size of unsigned int (4 BYTES)
// possible values: 0 to 4,294,967,295
uint[] pixels = new uint[width * height];
// Gets pointer to allocated array and fixes it,
// so that it won't be moved by Garbage Collector
fixed (uint* ptr = pixels)
{
camera.GetImage(ptr);
}
return pixels;
}
Любой человек может объяснить? Я действительно устал (кодировал последние 10 часов), и, может быть, мне что-то не хватает :(
Что случилось с проблемой? Вы можете получить изображение или нет? Вы также должны публиковать фактические подписи этих функций, а не только документацию. – xxbbcc
@xxbbcc Проблема заключается в том, что мой компилятор отклоняет «camera.GetImage (ptr)» Что касается сигнатур функций, то существует только библиотека .dll, содержащая интерфейсы: [DispId (6)] void GetImage (int pImageBuffer); [DispId (7)] –
Что произойдет, если вы откроете DLL с помощью программы просмотра библиотеки типов? https: // MSDN.microsoft.com/en-us/library/d0kh9f4c.aspx – xxbbcc