合并瓦片成大的图片


void MapGenerator::getTiles(const std::vector<TileImage> &vec)
  {
    data_.clear();

    int rowNum;
    int colNum;
    std::tie(colNum, rowNum) = tileTex_.textureSize;
    const int channels = 3;
    const int tileW = defs::tileSide * channels;
    const int texW = tileW * colNum;

    data_.resize(defs::tileSide * tileW * rowNum * colNum, 0);

    const auto &tiles = tileTex_.tiles;
    int w;
    int h;
    int chans;
    stbi_set_flip_vertically_on_load(true);

    for (const auto &ti : vec)
    {
      const auto &data = ti.data.data;

      if (data.empty())
      {
        continue;
      }

      auto it = tiles.find(ti.head);

      if (it != tiles.end())
      {
        const auto &row = it->second.row;
        const auto &col = it->second.col;

        auto buffer = stbi_load_from_memory(&data[0], data.size(), &w, &h, &chans, STBI_rgb);

        for (int i = 0; i < defs::tileSide; ++i)
        {
          memcpy(&data_[(row * defs::tileSide + i) * texW + col * tileW], &buffer[i * tileW], tileW);
        }

        stbi_image_free(buffer);
      }
    }

  }

----------------------------------

posted @ 2024-03-26 09:55  ParamousGIS  阅读(15)  评论(0编辑  收藏  举报