На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты
АРХИВ ФОРУМА...
здесь вы можете ознакомиться с материалами форума до 08.06.2008

RSC to BMP???

Поиск  Пользователи  Правила  Войти
Форум » Linux » ГИС Панорама для Linux
Страницы: Пред. 1 2 3
RSS
RSC to BMP???, Помогите сконвертировать объекты классификатора в BMP файлы
 
Продукт: ГИС Конструктор версии 11.10-2
Классификатор: violit2003.rsc
Код, выдирающий картинку:
Код
bool MapApi::saveImageFromRscLin(const QString& file_name, const char* key,
                                 const QSize& rect_in)
{
   try
   {
      HMAP hMap = this->getMapHandle();
      if(!hMap)
         throw std::runtime_error("Некорректный идентификатор карты");

      int mapdepth = 32;
      int allignwidth = rect_in.width()*(mapdepth / 8);
      int ximg_size = allignwidth * rect_in.height();
      char* lpBits = ::AllocateTheMemory(ximg_size);
      if(!lpBits)
      {
         _error = "Не удалось выделить память под карту";
         return 0;
      }
      memset(lpBits, 0x00, ximg_size);

      XIMAGEDESC XImage;
      XImage.Point    = lpBits;
      XImage.Width    = rect_in.width();
      XImage.Height   = rect_in.height();
      XImage.Depth    = mapdepth;/* = (unsigned short)(8 * 4);*/
      XImage.CellSize = 4;/* = XImage->Depth / 8;*/
      XImage.RowSize  = rect_in.width()*XImage.CellSize;

      RECT rect;
      rect.left = 0;
      rect.bottom = rect_in.height();
      rect.right = rect_in.width();
      rect.top = 0;

      HRSC hrsc = _core->mapGetRscIdent(hMap);
      if(!hrsc)
         throw std::runtime_error("Некорректный дескриптор клсассификатора");

      RSCOBJECT rsc_obj;
      int unknown_num = _core->mapGetRscObjectKeyIncode(hrsc,key);
      _core->mapGetRscObject(hrsc,unknown_num,&rsc_obj);
      long num = _core->mapGetRscObjectCodeByNumber(hrsc,rsc_obj.Code,rsc_obj.Local);
      COLORREF colorimage[256];
      long colorcount = _core->mapGetSiteColorsCount(hMap,hMap);
      _core->mapGetSitePalette(hMap,hMap,colorimage,colorcount);
      int val = _core->mapPaintExampleObjectByFuncToXImage(hMap,&XImage,&rect,
                       _core->mapGetRscObjectFunction(hrsc,num),
                       (char*)_core->mapGetRscObjectParameters(hrsc,num),
                       colorcount,colorimage,0,rsc_obj.Local);

      QImage img((uchar*)lpBits,rect_in.width(),rect_in.height(),QImage::Format_RGB32);

      FreeTheMemory(lpBits);
   }
   catch(std::runtime_error& err)
   {
      _error = err.what();
      return false;
   }
   return true;
}


Кстати выяснилось, что в файл не выгружаются не только значки, ключи которых начинаются с цифры, но и многие, которые начинаются с буквы.
Примеры ключей выгружаемых значков: "S1000000002", "P1000000003", T1000000004.
Примеры ключей не выгружаемых значков: "0092100001", "0092100002", "V0091140314", "V0091140315", "V0091140316".
Изменено: Игорь Михейчев - 24.05.2016 16:36:30
 
Функция mapGetRscObjectKeyIncode возвращает порядковый номер (индекс) объекта в классификаторе.
Это значение используется в функции mapGetRscObjectFunction, mapGetRscObjectLocal и других.

Вызовы mapGetRscObject и mapGetRscObjectCodeByNumber не нужны.

У Вас не рисуются программируемые знаки, которые отображает библиотека iml.
Возможно у Вас она не установлена.

Классификатор violit2003.rsc является устаревшим и в настоящее время не поддерживается.
 
Использую этот классификатор не я придумал, так что к сожалению придется работать с ним.
Все требуемые библиотеки iml лежат в одной папке с файлом rsc. Редактор классификатора (из состава ГИС Оператор) отображает значки.
Но Выводиться в файл они упорно не желают. В чем может быть причина?
 
Как было сказано выше - Классификатор violit2003.rsc является устаревшим и в настоящее время не поддерживается. Переходите на классификатор operator.rsc, который есть в инсталляциях ГИС Конструктор, ГИС Оператор.
 
Как было сказано выше - это зависит не от меня. Это не я определяю. У меня задание такое: использовать этот классификатор.
 
Мы Вам предлагаем приемлемый вариант использования нашего ПО. В классификаторе operator.rsc есть необходимый набор объектов.
Страницы: Пред. 1 2 3
Читают тему (гостей: 1)



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