Add a --tilesize option.

The produces tiled output way faster than repeatedly using --geometry
because it only reads the databse once.
This commit is contained in:
Martijn Versteegh
2018-11-14 12:34:52 +01:00
committed by Martijn Versteegh
parent 7025cfe3bf
commit fe5ba54fc9
7 changed files with 164 additions and 25 deletions

View File

@ -26,6 +26,7 @@ public:
void drawFilledRect(int x, int y, int w, int h, const Color &c);
void drawCircle(int x, int y, int diameter, const Color &c);
void save(const std::string &filename);
void fill(Color &c);
private:
Image(const Image&);

View File

@ -56,6 +56,8 @@ struct BitmapThing { // 16x16 bitmap
uint16_t val[16];
};
typedef std::list<std::pair<int, int> > PositionsList;
class TileGenerator
{
@ -63,9 +65,11 @@ private:
#if __cplusplus >= 201103L
typedef std::unordered_map<std::string, ColorEntry> ColorMap;
typedef std::unordered_set<std::string> NameSet;
typedef std::unordered_map<int, PositionsList> TileMap;
#else
typedef std::map<std::string, ColorEntry> ColorMap;
typedef std::set<std::string> NameSet;
typedef std::map<int, PositionsList> TileMap;
#endif
public:
@ -81,6 +85,7 @@ public:
void setDrawAlpha(bool drawAlpha);
void setShading(bool shading);
void setGeometry(int x, int y, int w, int h);
void setTileSize(int w, int h);
void setMinY(int y);
void setMaxY(int y);
void parseColorsFile(const std::string &fileName);
@ -90,6 +95,7 @@ public:
void setZoom(int zoom);
void setScales(uint flags);
void setDontWriteEmpty(bool f);
void tilePositions();
private:
void parseColorsStream(std::istream &in);
@ -97,8 +103,8 @@ private:
void closeDatabase();
void loadBlocks();
void createImage();
void renderMap();
std::list<int> getZValueList() const;
void renderMap(PositionsList &positions);
std::list<int> getZValueList(PositionsList &positions) const;
void renderMapBlock(const BlockDecoder &blk, const BlockPos &pos);
void renderMapBlockBottom(const BlockPos &pos);
void renderShading(int zPos);
@ -138,9 +144,11 @@ private:
int m_geomY;
int m_geomX2;
int m_geomY2;
int m_tileW;
int m_tileH;
int m_mapWidth;
int m_mapHeight;
std::list<std::pair<int, int> > m_positions;
ColorMap m_colorMap;
BitmapThing m_readPixels;
BitmapThing m_readInfo;
@ -148,6 +156,11 @@ private:
Color m_color[16][16];
uint8_t m_thickness[16][16];
PositionsList m_positions;
TileMap m_tiles;
int m_numTilesX, m_numTilesY;
int m_zoom;
uint m_scales;
}; // class TileGenerator