首页 / 浏览问题 / 组件GIS / 问题详情
iobjects c++ 怎么把自定义图片制作成符号库
56EXP 2019年10月24日
求解怎么把自制的png图片制作成符号库,在跟踪层显示

1个回答

您好,比较方便准确的方式是在iDesktop中,打开左侧工作空间管理里的点符号资源,新建符号,可导入图片。具体操作看在iDesktop的帮助文档中搜索“导入点符号”。
694EXP 2019年10月24日
你好!

    我现在用的是linux版的iobjiobjects c++版,用iDesktop来制作可以吗?如果不行用代码实现应该咋实现呢?
您好,可以用iDesktop制作,代码实现方式待确定后告诉你。
你好!

请问一下iobjects c++用代码制作符号库实现了吗?
同问,需要支持用户自定义点符号显示,如何通过代码层实现支持?

每次都需要制作符号库的方式是用户不可接受的。

使用 SetPicturePath 实现的刷新极慢,无法使用。
大致过程是将图片数据读取到UGImageData, 然后创建成UGGeoPicture, 再转换的Symbol添加到符号库使用,过程比较复杂,试了一下效果不是特别好吧。还是建议使用iDesktop制作符号库,可将符号导出成符号库文件,再用代码加载符号库即可。

    UGImageData* pImageData = new UGImageData();
    pImageData->btBitsPixel = 32;
    pImageData->nWidth = image.GetWidth();
    pImageData->nHeight = image.GetHeight();
    pImageData->nWidthBytes = image.GetWidth() * 4; // 32bits/pixel
    pImageData->btPlanes = 1;

    int byteCount = pImageData->nHeight * pImageData->nWidthBytes;
    pImageData->pBits = new UGbyte[byteCount];

    memcpy(pImageData->pBits, (UGbyte*)image.GetBits(), byteCount);

    arrayImageData[0] = pImageData;

    UGGeoPicture* pGeoPic = new UGGeoPicture();
     pGeoPic->Make(arrayImageData, UGPoint2D(5, 5), UGSize2D(10, 10));
     UGMarkerSymbol* pMarkerSymbol = new UGMarkerSymbol();
     UGSymbol* pSymbol = pMarkerSymbol;
     UGRect2D rect = pGeoPic->GetBounds();

     UGSymbolToGeometry::GeometryToSymbol(pGeoPic, rect, pSymbol);

     pSymbol->SetName(_U("Defined"));
     pWorkspace->m_Resources.GetMarkerSymbolLib()->AddSymbol(pSymbol);

     int id = pSymbol->GetID();
非常感谢,我已经采用制作符号库文件的方式来实现

感谢回答 

试了一下效果不是特别好吧

这个不好具体体现在什么方面呢?

...