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

Как отрисовать пример объекта на QLabel?

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Как отрисовать пример объекта на QLabel?, Как отрисовать пример объекта на QLabel?
 
Здравствуйте! На форуме нашел исчерпывающее руководство как использовать mapPaintExampleObjectEx, но к сожалению x11AppDisplay() у QPixmap, теперь(Qt5) отсутствует. Как поступить? Если можно пример кода, пожалуйста.
 
Здравствуйте!

Можно отрисовывать образец знака непосредственно в память, минуя X11, с помощью функции mapPaintExampleObjectByFuncToXImage (mapapi.h).
Пример использования можно посмотреть в этой ветке форума:
http://gisweb.ru/forum/messages/forum4/topic7330/message52317/#message52317
Изменено: Александр Савелов - 30.04.2019 09:23:38
 
Цитата
Александр Савелов написал:
mapPaintExampleObjectByFuncToXImage
Спасибо, помогло, но остался вопрос. Вот мой код:
Код
    // in_number - порядковый номер объекта в классификаторе

    RSCOBJECT object;
    mapGetRscObject(hRsc, in_number, &object);
    int num = mapGetRscObjectCodeByNumber(hRsc, object.Code, object.Local);
    COLORREF colorimage[256];
    int deth = 32;
    int colorcount = mapGetSiteColorsCount(view->GetMapHandle(), view->hSite);
    mapGetSitePalette(view->GetMapHandle(), view->hSite, colorimage, colorcount);
    
    int  mapdepth = 32;
    int cw=32;
    int ch=32;

    long allignwidth = cw * (mapdepth / 8 );
    long size   = allignwidth*ch;
    char * bits = ::AllocateTheMemory(size);
    int ret;

    XIMAGEDESC Ximagedesc;
    Ximagedesc.Point     = bits;                    // Адрес начала области пикселов
    Ximagedesc.Width     = cw;                      // Ширина строки в пикселах
    Ximagedesc.Height    = ch;                      // Число строк
    Ximagedesc.Depth     = mapdepth;                // Размер элемента в битах (8,15,16,24,32)
    Ximagedesc.CellSize  = mapdepth / 8;            // Размер элемента(пиксела) в байтах
    Ximagedesc.RowSize   = cw * Ximagedesc.CellSize;// Ширина строки в байтах


    RECT Rect;
    Rect.bottom = ch;
    Rect.left = 0;
    Rect.right = cw;
    Rect.top = 0;

   int val = mapPaintExampleObjectByFuncToXImage(view->GetMapHandle(), &Ximagedesc, &Rect,
                       mapGetRscObjectFunction(hRsc, num),
                       (char *)mapGetRscObjectParameters(hRsc, num),
                       colorcount, colorimage, 0, object.Local);

   QImage pixmap ((uchar *)bits,cw, ch, QImage::Format_RGB32);
   ui->label->setPixmap(QPixmap::fromImage(pixmap));
В результате объект рисуется в двух местах и на карте в левом углу, и на лэйбле ui->label. Мне нужно рисовать только на лэйбле, что я делаю не так?
 
Здравствуйте!

Приведенный участок программы выполняет отрисовку образца вида объекта только в память.
Возможно, в другом месте программы выполняется нанесение объекта на карту (например, с помощью функции mapCommitObject).
 
Пример отображения средствами Qt отрисованной в XIMAGEDESC картинки можно посмотреть в примере mapview, входящем в состав инсталляции (
MapWidget::DrawMap(), mapwidget.cpp).
 
Цитата
Александр Савелов написал:
Пример отображения средствами Qt отрисованной в XIMAGEDESC картинки можно посмотреть в примере mapview, входящем в состав инсталляции (
MapWidget::DrawMap(), mapwidget.cpp).
Там используется mapPaintToXImage, которая отрисовывает карту. А мне необходимо пример объекта!
Изменено: Евгений Соболев - 13.05.2019 11:11:50
Страницы: 1
Читают тему (гостей: 1)



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

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