На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

C# Linux, Изображение карты

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1 2 3 След.
RSS
C# Linux, Изображение карты
 
Добрый. Я пытаюсь получить изображение загруженной карты.

Использую:
Код
private static extern IntPtr mapCreateImageEx(int width, int height);
private static extern void mapDrawImageMapEx(IntPtr hImage, IntPtr hMap, RECT rect, int positionX, int positionY);

В результате получаю пустой указатель, после выполнения mapCreateImageEx



Подкажите, я верно и в правильном порядке запуская вызовы?
Спасибо.
Изменено: Денис Вицко - 07.06.2022 12:30:55 (исправил вставку картинок)
 
Что есть 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);
 
Спасибо. Карта открыта. map - это класс. Handle - это указаьтель на карту.

Вызов функции mapCreateImageEx возвращает пустой указатель, что показано на рисунке.
Почему? По видимому ошибка. Как эту ошибку диагностировать?
 
Еще раз:
Цитата
Денис Вицко написал:
Что должны вернуть map.Width и map.Heigth?

Какие значения передаются в mapCreateImageEx?
 
Цитата
Денис Вицко написал:
Еще раз:
Цитата
Денис Вицко написал:
Что должны вернуть map.Width и map.Heigth?

Какие значения передаются в mapCreateImageEx?
Сейчас это 100 x 100 пикселей.)
Это размер изображения в пикселях - будет.
 
Тогда проблем быть не должно.
Возможно, некорректно описан импорт функции.

Кстати, эта функция предназначена для ведения второго буфера экрана (чтобы быстро стереть изображение предыдущим состоянием, например, при отображении движущихся по карте объектов).

Можно, конечно, и оттуда потом вытащить изображение, но непосредственно функции для отрисовки картыперечислены тут (см. функции mapPaint*).
 
Добрый. Разобрался. Функция mapDrawImageMapEx  
Код
_MAPIMP long int _MAPAPI mapDrawImageMapEx(HIMAGE himage, HMAP hMap, RECT *rect, POINT *position, long int onlymap);
В поле himage возвращает значение указателя. Теперь я хочу понять к какому типу данных в C# будет корректно привести указатель.
Пробую к массиву байт
Код
var bytes = new byte[size];
В связи с чем мне компмлятор выдает сооьщени о том, что я "лезу в защищенную память".
Как мне понять, какой тип данных HIMAGE?
Спасибо.
Изменено: Alexander Volovikov - 09.06.2022 10:50:42
 
Используйте текстовый поиск по заголовочным файлам include/*.h

Цитата
typedef void *   HIMAGE;       // ИДЕНТИФИКАТОР TCopyImage

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);

 // Удалить буфер образа окна карты
 // himage - идентификатор буфера окна

_MAPIMP void _MAPAPI mapCloseImage(HIMAGE image);
 
Простите. Не понятно, мне.
Мне необходимо получить изображение участка карты. Не отобразить его, а получить. Лучше всего в виде набора байтов.
Писал Выше.

Подскажите пожалуйста, подобный кейс я могу решить с помощью SDK?
Спасибо
Изменено: Alexander Volovikov - 09.06.2022 14:04:54
 
Цитата
Alexander Volovikov написал:
Подскажите пожалуйста, подобный кейс я могу решить с помощью SDK?

SDK предназначен для разработки прикладных задач, функционирующих в составе ГИС Панорама или ГИС Оператор. Подробнее можно прочитать тут.

Насколько я понимаю, Вы пытаетесь разработать автономное приложение.
При этом Вы можете использовать SDK для ознакомления с примерами вызова MAPAPI-функций.

Цитата
Alexander Volovikov написал:
Мне необходимо получить изображение участка карты. Не отобразить его, а получить. Лучше всего в виде набора байтов.

Судя по всему, Вы даже не потрудились посмотреть функции, о которых я писал выше:

Цитата
Денис Вицко написал:
функции для отрисовки карты перечислены тут  (см. функции mapPaint*)


Все они как раз получают изображение в виде массивов байт:




К примеру, порядок использования mapPaintToDib показан в SDK - см. \mapexam\mapexam24.cpp
Страницы: 1 2 3 След.
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности