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

Проблема с цветами пиктограмм объектов из классификатора

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Проблема с цветами пиктограмм объектов из классификатора
 
Здравствуйте.
Отображаем пиктограммы объектов классификатора с помощью mapPaintExampleObjectByFuncToXImage() как разбиралось в этой теме. С переходом на AstraLinux 1.6 на Конструкторе 12.6.0.190 (у нас куплена Free версия) появились проблемы с цветом отображаемых образцов объектов классификатора - вместо белого цвета везде серый, остальные цвета тоже выглядят совсем иначе,как будто с примесью серого. На картинке видно.
Пробовали Конструктор 12.6.1 - результат такой же.
На AstraLinux 1.5 Конструктор 12.6.1 все работает отлично.
Изменено: Илья Аникин - 13.01.2020 12:28:26
 
Здравствуйте!

Не могли бы Вы, пожалуйста, предоставить используемый классификатор и указать объект на котором воспроизводится данная проблема? Данные можно прислать на электронную почту panorama@gisinfo.ru

Спасибо!
 
Здравствуйте.
Проблема наблюдается на всех классификаторах и на всех объектах, которые я попробовал, для примера можно взять road25.rsc из состава ГИС Конструктор 12.6.0.190 (взял из /usr/share/gisdesigner/...). Пиктограммы всех его объектов выглядят подобным образом - вот так отображается часть объектов road25.rsc - ссылка.

На картинке по ссылке в каждой ячейке таблицы - кнопка с натянутой на нее пиктограммой объекта. Видно, что объекты рисуются на сером фоне с блеклыми цветами.
 
Здравствуйте.
Для проверки запускали пример получения образцов отображения объектов перебором на ГИС Конструктор 12.6.1,  ОС AstraLinux 1.6.

Код
#include <assert.h>
#include <iostream>

#include <QImage>

#include "mapapi.h"
#include "rscapi.h"

void PaintObject(HMAP mapHandle, HRSC rscHandle, long rscIncode)
{
  // Получить информацию по объекту из классификатора
  RSCOBJECT rscObject;
  mapGetRscObject(rscHandle, rscIncode, &rscObject);

  // Получить номер функции отображения и параметры из классификатора
  long rscObjectFunctionNumber = mapGetRscObjectFunction(rscHandle, rscIncode);
  assert(rscObjectFunctionNumber);

  const char *rscObjectParameters = mapGetRscObjectParameters(rscHandle, rscIncode);
  assert(rscObjectParameters);

  // Запросить параметры палитры карты (для отображения объекта)
  COLORREF palette[256];
  long colorCount = mapGetSiteColorsCount(mapHandle, mapHandle);
  mapGetSitePalette(mapHandle, mapHandle, palette, colorCount);

  // Выделить память для отрисовки объекта
  const int ICON_SIZE = 32;
  XIMAGEDESC ximageDesc;
  ximageDesc.Width = ICON_SIZE;
  ximageDesc.Height = ICON_SIZE;
  ximageDesc.Depth = 32;
  ximageDesc.CellSize = ximageDesc.Depth / 8;
  ximageDesc.RowSize = ximageDesc.Width * ximageDesc.CellSize;

  char *paintMemory = new char[ximageDesc.Width * ximageDesc.Height * ximageDesc.CellSize];
  ximageDesc.Point = paintMemory;
  assert(paintMemory);

  // Отрисовать образец объекта
  RECT rectDraw;
  rectDraw.left = 0;
  rectDraw.top = 0;
  rectDraw.right = ICON_SIZE;
  rectDraw.bottom = ICON_SIZE;

  char *objectText = NULL;
  long isPainted = mapPaintExampleObjectByFuncToXImage(mapHandle, &ximageDesc, &rectDraw, rscObjectFunctionNumber, (char *) rscObjectParameters, colorCount, palette, objectText, rscObject.Local);
  assert(isPainted);

  // Вывести картинку в файл
  QImage image((uchar *) (ximageDesc.Point), ximageDesc.Width, ximageDesc.Height, QImage::Format_ARGB32);
  image.save("/tmp/rsc-images/" + QString::number(rscIncode) + ".png");
}


int main()
{
  // Открыть карту
  WCHAR mapPath[MAX_PATH_LONG];
  mapPath[0] = 0;
  WcsCopy(mapPath, L"/tmp/test_data/road.sit", sizeof(mapPath));

  HMAP mapHandle = mapOpenDataUn(mapPath);
  assert(mapHandle);

  // Открыть классификатор
  WCHAR rscPath[MAX_PATH_LONG];
  rscPath[0] = 0;
  WcsCopy(rscPath, L"/tmp/test_data/road25.rsc", sizeof(rscPath));

  HRSC rscHandle = mapOpenRscUn(rscPath);
  assert(rscHandle);

  // Отрисовать образцы всех объектов в классификаторе
  for (int objectNumber = 1; objectNumber <= mapGetRscObjectCount(rscHandle); objectNumber++)
    PaintObject(mapHandle, rscHandle, objectNumber);

  mapCloseData(mapHandle);
  mapCloseMapAccess();

  return 0;
}
В результате работы примера получены следующие образцы объектов.
 
Здравствуйте. Запустил ваш пример - все нормально.

Первоначально проверял в условиях, когда открыта map-карта, создается sit с целевым классификатором и для него уже формируются пиктограммы.

Как выяснилось, ключевое отличие состоит в том, что к моменту формирования пиктограмм у меня всегда есть открытая map-карта. Оказывается, теперь (в новых версиях ГИС Конструктор ) в формируемых картинках учитываются уровни яркости и контрастности изображения основной карты. Отсюда вытекает вопрос: помимо установки глобального контраста/яркости на всю карту, могу ли я как-то точечно повлиять на цвет формируемых пиктограмм?
 
Уточните, пожалуйста, что означает открытая map-карта? Т.е. Вы при формировании картинок передаете mapHandle отдельно открытого sit, но при этом у Вас уже открыта карта map? Или Вы добавляете sit к map, после чего пытаетесь формировать картинки?

Просто в логике mapapi заложено, что HMAP(mapHandle) это идентификатор документа, который может состоять из нескольких карт/растров/матриц. Например, прозрачность можно задавать для каждой карты/растра/матрицы, чтобы можно было ее оттенить. А контрастность/яркость применяется ко всему документу для калибровки выводимого изображения.
В вызове функции mapPaintExampleObjectByFuncToXImage Вы передаете палитру, на основе которой должно выполняться отображение объекта. Поэтому если Вы в ней измените цвет, то знак должен отображаться по-другому.

Так же, как обходной вариант можно рассмотреть сброс параметров яркости/контрастности на время формирования знаков с последующим восстановлением.
 
Цитата
Vladimir Letov написал:
Уточните
Открытая map-карта это документ, состоящий из нескольких карт/растров/матриц. Для получения картинок добавляю sit к map.
Цитата
Vladimir Letov написал:
сброс параметров яркости/контрастности на время
Пока так и сделал, все отлично.


Теперь логика формирования значков стало понятней, нас запутал тот факт, что на более ранних версиях Конструктора код работал без учета яркости/контрастности, соответственно никто и не задумывался о таких материях.

Всем участникам спасибо.
Страницы: 1
Читают тему (гостей: 1)



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

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