Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagecpp
titleMap2bmp
sdp = SlamwareCorePlatform::connect(opt_sdpIPAddress, opt_sdpPort);   
     
rpos::core::RectangleF knownArea = sdp.getKnownArea(MapTypeBitmap8Bit, rpos::features::location_provider::EXPLORERMAP); //获得地图已知区域

Map map = sdp.getMap(MapTypeBitmap8Bit, knownArea, rpos::features::location_provider::EXPLORERMAP);//根据地图已知区域,获得地图

bitmap_image mapBitmap(map.getMapDimension().x(), map.getMapDimension().y()); //根据已获得的地图尺寸,定义bmp

for (size_t posY = 0; posY < map.getMapDimension().y(); ++posY) //获取mapdata数据,并转化成bmp
{
   for (size_t posX = 0; posX < map.getMapDimension().x(); ++posX)
   {
      rpos::system::types::_u8 cellValue = 128 + map.getMapData()[posX + (map.getMapDimension().y()-posY-1) * map.getMapDimension().x()];
      mapBitmap.set_pixel(posX, posY, cellValue, cellValue, cellValue);
   }
}

上述代码中由getKnowArea() 获取到的KnownArea, 指的是当前所生成的地图的区域,这部分会随着机器人运行过程中地图的增大而增大。getMapDimention().x() getMapDimention().y()分别获取的是地图X, Y方向的像素个数。getMapData()中的数据,是一组数值在。 -128 ~ 127 之间的包含地图信息的整数,在转换成灰度值的时候,需要加上128。在for循环中,可以看到,实际上所生成的BMP图像,相当于mapdata按Y轴上下反转了。下图为地图的坐标

Image Added