Цитата |
---|
typedef struct XIMAGEDESC // Описатель битовой области XImage { // (для применения с XWindow) char * Point; // Адрес начала области пикселов
int Width; // Ширина строки в пикселах int Height; // Число строк int CellSize; // Размер элемента(пиксела) в байтах int RowSize; // Ширина строки в байтах
int Depth; // Размер элемента в битах (8,15,16,24,32) int Reserve; } XIMAGEDESC;
// Вывести изображение карты в XImage (массив) // Описание структуры XIMAGEDESC в maptype.h // hmap - идентификатор открытых данных // x,y - координаты левого верхнего угла внутри // битовой области XImage для размещения изображения // rect - выводимый фрагмент карты // При ошибке в параметрах возвращает ноль
_MAPIMP long int _MAPAPI mapPaintToXImage(HMAP hmap, XIMAGEDESC *imagedesc, long int x, long int y, RECT *rect); |
Адрес начала области пикселов - это указатель на массив.
Массив Вы должны выделить самостоятельно и передать указатель на него в соответствующем параметре структуры, по окончании работы Вы должны освободить эту память.
Пример заполнения:
Цитата |
---|
// Отрисовать карту const int cDrawWidth = 1024; const int cDrawHeight = 1024; const int cBytesPerPixel = 4;
RECT drawRect; drawRect.left = 0; drawRect.top = 0; drawRect.right = drawRect.left + cDrawWidth; drawRect.bottom = drawRect.top + cDrawHeight;
char* imageMemory = new char[cDrawWidth * cDrawHeight * cBytesPerPixel];
XIMAGEDESC imageDesc; imageDesc.Point = imageMemory; imageDesc.Width = cDrawWidth; imageDesc.Height = cDrawHeight; imageDesc.CellSize = cBytesPerPixel; imageDesc.Depth = cBytesPerPixel * 8; // 8-битное изображение imageDesc.RowSize = cDrawWidth * cBytesPerPixel; |
На будущее - для понимания.
В API функции (да и не только в API) если передается указатель на что-то, то это "что-то" выделяется в памяти снаружи функции.
Если функция сама что-то выделяет в памяти и должна вернуть наружу эту память, то чтобы получить указатель на выделяемую внутри функции память, в функцию передается параметр - указатель на указатель.
То, что выделяется внутри DLL, - либо освобождается отдельной API-функцией, либо в комментарии к функции будет указано, как освободить память.