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

Отображение иконок PNG с альфа каналом

Поиск  Пользователи  Правила  Войти
Форум » Архивные темы (доступны только для чтения) » Особенности работы ГИС Конструктор SE версии 12.5.2 (сертифицированная версия)
Страницы: 1
RSS
Отображение иконок PNG с альфа каналом, Отображаются квадратные рамки вместо иконок png формата с альфа каналом
 
Здравствуйте, работал раньше с 13 версией гиса, получалось отрисовать без проблем свои иконки в png формате, перешли на сертифицированную версию 12.5.2 и не всё так гладко пошло.
В 12 гисе пришлось закомментить параметр Rotate у структуры IMGGRAPHICMARKEX, так как его ещё похоже не было.
Вместо png иконок отображаются квадратные рамки, что делаю не так или какие есть нюансы?

P.s. bmp картинки отображаются, но альфа канала нет, выглядит плохо)


void MainMap::drawImageOfObject(HSITE hSite, QString pathSVG, QString pathPNG, DOUBLEPOINT &p, QString color, int rotate, quint8 zoom)
{
   HOBJ hObj = mapCreateSiteObject(hMap, hSite);

   mapRegisterDrawObject(hObj, 1, LOCAL_VECTOR);

   IMGGRAPHICMARKEX graphicMark;
   memset(&graphicMark, 0, sizeof(graphicMark));
   graphicMark.Length = sizeof(graphicMark);

   changeSVGColorAndSaveToPNG(pathSVG, pathPNG, color, rotate);

   QImageReader readerPNG(pathPNG);

   double width = readerPNG.size().width() * 10 / (zoom + 1),
          height = readerPNG.size().height() * 10 / (zoom + 1);

   StrCopy(graphicMark.Name, pathPNG.toStdString().c_str(), sizeof(graphicMark.Name));
   graphicMark.Type = 0;  // Тип файла (0 - PNG, 1 - BMP, 2 - JPG ...
   graphicMark.Width = PIX2MKM((int)width);
   graphicMark.Height = PIX2MKM((int)height);
   graphicMark.PosV = PIX2MKM((int)(height / 2));
   graphicMark.PosH = PIX2MKM((int)(width / 2));
//    graphicMark.Rotate = 1;  // Установка возможности поворота

   mapAppendDraw(hObj, IMG_GRAPHICMARK, (char *)&graphicMark);
   mapAppendPointPlane(hObj, p.x, p.y);
   mapAppendPointPlane(hObj, p.x, p.y);

   mapCommitObject(hObj);
   mapFreeObject(hObj);
}
Изменено: Глеб Недосекин - 06.02.2023 16:19:41
 

Здравствуйте!

Указанное поведение - особенность отрисовки версии 12 при отображении карты в экранном виде.
Для отображения данного объекта можно попробовать воспользоваться принтерным видом, установив его с помощью функции mapSetViewType() (mapapi.h).

 
Здравствуйте, спасибо большое, помогло, задал так: mapSetViewType(hMap, VT_PRINT);
Хотя могу сразу сказать что могут пропасть некоторые слои карты, у меня, например, вода исчезла, надо будет с другими типами "PRINT" проверить.
 
В классификаторе можно задать 2 вида условных знаков объектов - экранный и принтерный.
Если второй вид не заполнен, то изображение в принтерном виде может отсутствовать. Тогда нужно поправить вид знака в классификаторе (скопировать экранный вид, например).
Страницы: 1
Читают тему (гостей: 1)



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

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