Что есть map? Видимо, некий экземпляр класса, открывающего карту?
Карта у Вас не открыта, судя по всему (строка ниже говорит, что Hadle нулевой). Что должны вернуть map.Width и map.Heigth?
Значения width и height для функции mapCreateImageEx указываются в пикселах и описывают размер буфера экрана. Если Вы туда передаете габариты карты, то они в метрах и могут иметь огромные значения, что никакой памяти не хватит.
Цитата
// Создать буфер образа окна карты в памяти для исключения мигания перемещаемых по карте объектов // width - ширина клиентской части окна карты в точках // height - высота клиентской части окна карты в точках // Создается первый буфер экрана, второй создается при первом вызове // функции отображения объекта в буфер (Draw) - для оптимального // применения функций при отображении карты и без перемещаемых объектов // Размер одного буфера в байтах - width * height * 4 (1920*1080*4 = 8 294 400, для 3 - 24 883 200) // Всего может быть параллельно открыто до 1024 образов экранов одновременно // Может применяться в паре с функцией mapChangeImageSizeEx // При успешном выполнении возвращает идентификатор образа экрана // При ошибке возвращает ноль
_MAPIMP HIMAGE _MAPAPI mapCreateImageEx(long int width, long int height);
Тогда проблем быть не должно. Возможно, некорректно описан импорт функции.
Кстати, эта функция предназначена для ведения второго буфера экрана (чтобы быстро стереть изображение предыдущим состоянием, например, при отображении движущихся по карте объектов).
Можно, конечно, и оттуда потом вытащить изображение, но непосредственно функции для отрисовки картыперечислены тут (см. функции mapPaint*).
HIMAGE - это указатель на некий экземпляр объекта в ядре, этот указатель Вы сначала получаете, создав буфер окна карты, передаете в MAPAPI-функции, которые его требуют для отрисовки карты в буфер и пр. операций, а в конце освобождаете mapCloseImage, после чего он становится недействительным.
Цитата
// Создать буфер образа окна карты в памяти для исключения мигания перемещаемых по карте объектов // width - ширина клиентской части окна карты в точках // height - высота клиентской части окна карты в точках // Создается первый буфер экрана, второй создается при первом вызове // функции отображения объекта в буфер (Draw) - для оптимального // применения функций при отображении карты и без перемещаемых объектов // Размер одного буфера в байтах - width * height * 4 (1920*1080*4 = 8 294 400, для 3 - 24 883 200) // Всего может быть параллельно открыто до 1024 образов экранов одновременно // Может применяться в паре с функцией mapChangeImageSizeEx // При успешном выполнении возвращает идентификатор образа экрана // При ошибке возвращает ноль
_MAPIMP HIMAGE _MAPAPI mapCreateImageEx(long int width, long int height);
Простите. Не понятно, мне. Мне необходимо получить изображение участка карты. Не отобразить его, а получить. Лучше всего в виде набора байтов. Писал Выше.
Подскажите пожалуйста, подобный кейс я могу решить с помощью SDK? Спасибо
Alexander Volovikov написал: Подскажите пожалуйста, подобный кейс я могу решить с помощью SDK?
SDK предназначен для разработки прикладных задач, функционирующих в составе ГИС Панорама или ГИС Оператор. Подробнее можно прочитать тут.
Насколько я понимаю, Вы пытаетесь разработать автономное приложение. При этом Вы можете использовать SDK для ознакомления с примерами вызова MAPAPI-функций.
Цитата
Alexander Volovikov написал: Мне необходимо получить изображение участка карты. Не отобразить его, а получить. Лучше всего в виде набора байтов.
Судя по всему, Вы даже не потрудились посмотреть функции, о которых я писал выше: