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

[MAPAPI] Отрисовка значка с прозрачным фоном из классификатора

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1 2 След.
RSS
[MAPAPI] Отрисовка значка с прозрачным фоном из классификатора
 
Здравствуйте. Подскажите пожалуйста, как получить картинку с прозрачным фоном из классификатора? Или где и какие флаги установить с помощью функций MAPAPI, желательно кроссплатформенной.

// Версия библиотеки MapAccess
// (если применяется "mapacces.h" и т.п.)
#define MAPACCESSVERSION  20130912

// Версия интерфейса MAPAPI и ядра библиотеки
#define MAPAPIVERSION  0x111015
 
Поясните, пожалуйста, вопрос.
Я не понимаю что такое "картинка с прозрачным фоном из классификатора".
Это отображение карты с прозрачным фоном или отображение образца знака из классификатора с прозрачным фоном?
 
Цитата
Vladimir Letov написал:
Поясните, пожалуйста, вопрос.
Я не понимаю что такое "картинка с прозрачным фоном из классификатора".
Это отображение карты с прозрачным фоном или отображение образца знака из классификатора с прозрачным фоном?
Отображение знака из классификатора с прозрачным фоном.
 
Код
  // Вывести изображение карты в XImage (массив)
  // hmap  - идентификатор открытых данных
  // imagedesc - параметры области для размещения изображения
  // Описание структуры XIMAGEDESC в maptype.h
  // erase - признак очистки области изображения (если равен -2, то изображение рисуется
  //         поверх имеющегося рисунка без очистки)
  // x,y - координаты левого верхнего угла внутри
  // битовой области XImage для размещения изображения
  // rect - фрагмент для вывода отображения
  // func - функция отображения объекта
  // parm - параметры изображения
  // data - метрика для отображения
  // colors - количество цветов
  // palette - палитра
  // При ошибке в параметрах возвращает ноль

_MAPIMP long int _MAPAPI  mapPaintExampleObjectByFuncDataToXImageEx(HMAP hMap, XIMAGEDESC * imagedesc,
                                                                    long int erase, long int x, long int y,RECT * rect,
                                                                    long int func, const char* parm, POLYDATAEX* data);

На вход подавать очищенный прозрачностью XImage, и выставлять erase = -2.
Данная функция используется при отображении образцов знаков классификатора в редакторе классификатора в Linux.
В Windows используют отображение напрямую средствами WINAPI, но данная функция должна тоже работать.
 
Цитата
Vladimir Letov написал:
Код
_MAPIMP long int _MAPAPI  mapPaintExampleObjectByFuncDataToXImageEx(HMAP hMap, XIMAGEDESC * imagedesc,
                                                                    long int erase, long int x, long int y,RECT * rect,
                                                                    long int func, const char* parm, POLYDATAEX* data); 

На вход подавать очищенный прозрачностью XImage, и выставлять erase = -2.
Данная функция используется при отображении образцов знаков классификатора в редакторе классификатора в Linux.
В Windows используют отображение напрямую средствами WINAPI, но данная функция должна тоже работать.
Не нашел в mapapi.h данной функции. Версию MAPAPI приводил выше.
 
А возможность обновить версию имеется?
 
Цитата
Vladimir Letov написал:
А возможность обновить версию имеется?
На данный момент нет. Нужна сертифицированная версия. На эту версию есть сертификат МО.
 
Что если использовать отображение образца объекта без прозрачности, а потом заменять цвет фона на прозрачный?
Цвет фона запросить можно через mapGetBackColor или mapGetBackPrintColor для принтерного вида.
 
Цитата
Vladimir Letov написал:
Что если использовать отображение образца объекта без прозрачности, а потом заменять цвет фона на прозрачный?
Цвет фона запросить можно через mapGetBackColor или mapGetBackPrintColor для принтерного вида.
А можно, если не сложно, привести пример кода?

Я пока делал примерно так:
Код
// QString src; путь к файлу классификатора rsc
m_d->m_mapHandler = mapCreateTempSiteUn(ushortToWChar(src.utf16()));

// думал, что это делает прозрачным фон временной пустой карты, но видимо это не так
mapSetBackColor(m_d->m_mapHandler, IMGC_TRANSPARENT);

.....

// Для непосредственной отрисовки делал следующим образом:
Q_DECL_CONSTEXPR auto DEF_ICON_SIZE = 32;
XIMAGEDESC imageDescr;
imageDescr.Width = DEF_ICON_SIZE;
imageDescr.Height = DEF_ICON_SIZE;
imageDescr.Depth = 32;
imageDescr.CellSize = imageDescr.Depth / 8;
imageDescr.RowSize = imageDescr.Width * imageDescr.CellSize;
RECT rectDraw;
rectDraw.left = 0;
rectDraw.top = 0;
rectDraw.right = DEF_ICON_SIZE;
rectDraw.bottom = DEF_ICON_SIZE;

// Пробовал здесь использовать формат QImage::Format_ARGB32, но не получилось ничего
QImage img(imageDescr.Width, imageDescr.Height, QImage::Format_RGB32);
imageDescr.Point = reinterpret_cast<char *>(img.bits());

switch (rscObjectFunction) {
case IMG_LIBRARY:
  // TODO:дописать отображение из iml
  continue;
  break;
default:
   mapPaintExampleObjectByFuncToXImage(m_mapHandler, &imageDescr,
                                                     &rectDraw,
                                                     rscObjectFunction,
                                                     const_cast<char *>(rscObjectParametersPointer),
                                                     0,
                                                     Q_NULLPTR,
                                                     Q_NULLPTR,
                                                     rscObjectLocal);
}  

А так можно любой способ, лишь бы работало.
Изменено: Сергей - 19.04.2018 11:05:14 (Уточнение DEF_ICON_SIZE)
 
Приветствую!

Предложенный выше способ работает. После вызова mapPaintExampleObjectByFuncToXImage можно обработать imageDescr.Point хоть попиксельно и добавить нужную прозрачность для пикселей, которые совпадают с цветом фона. А потом QImage создать в формате с прозрачностью.

ЗЫ: не специалист по Qt, но в GTK по такому сценарию работает)

С уважением,
Матвеев П.В.
Страницы: 1 2 След.
Читают тему (гостей: 2)



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

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