diff --git a/CMakeLists.txt b/CMakeLists.txt index d526723..9ae1def 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,8 @@ endif(CMAKE_COMPILER_IS_GNUCXX) find_package(PkgConfig) +include(FindPackageHandleStandardArgs) + pkg_check_modules(PC_LIBSQLITE QUIET sqlite3) set(LIBSQLITE3_DEFINITIONS ${PC_LIBSQLITE_CFLAGS_OTHER}) @@ -19,7 +21,6 @@ find_library(LIBSQLITE3_LIBRARY NAMES sqlite3 libsqlite3 HINTS ${PC_LIBSQLITE_LI set(LIBSQLITE3_LIBRARIES ${LIBSQLITE3_LIBRARY} ) set(LIBSQLITE3_INCLUDE_DIRS ${LIBSQLITE3_INCLUDE_DIR} ) -include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LibSqlite3 DEFAULT_MSG LIBSQLITE3_LIBRARY LIBSQLITE3_INCLUDE_DIR) mark_as_advanced(LIBSQLITE3_INCLUDE_DIR LIBSQLITE3_LIBRARY ) @@ -50,4 +51,5 @@ add_executable(minetest_mapper target_link_libraries( minetest_mapper ${LIBSQLITE3_LIBRARIES} + gd ) diff --git a/TileGenerator.cpp b/TileGenerator.cpp index d0cca87..8bca0b7 100644 --- a/TileGenerator.cpp +++ b/TileGenerator.cpp @@ -7,6 +7,7 @@ * ===================================================================== */ +#include #include #include #include @@ -24,6 +25,7 @@ TileGenerator::TileGenerator(): m_drawScale(false), m_drawUnderground(false), m_db(0), + m_image(0), m_xMin(0), m_xMax(0), m_zMin(0), @@ -112,10 +114,12 @@ void TileGenerator::parseColorsFile(const std::string &fileName) } } -void TileGenerator::generate(const std::string &input, const std::string &/*output*/) +void TileGenerator::generate(const std::string &input, const std::string &output) { openDb(input); loadBlocks(); + createImage(); + writeImage(output); } void TileGenerator::openDb(const std::string &input) @@ -157,8 +161,6 @@ void TileGenerator::loadBlocks() break; } } - m_imgWidth = (m_xMax - m_xMin) * 16; - m_imgHeight = (m_zMax - m_zMin) * 16; } else { throw DbError(); @@ -186,3 +188,21 @@ inline int TileGenerator::unsignedToSigned(long i, long max_positive) } } +void TileGenerator::createImage() +{ + m_imgWidth = (m_xMax - m_xMin) * 16; + m_imgHeight = (m_zMax - m_zMin) * 16; + m_image = gdImageCreate(m_imgWidth, m_imgHeight); + // Background + gdImageColorAllocate(m_image, 255, 255, 255); +} + +void TileGenerator::writeImage(const std::string &output) +{ + FILE *out; + out = fopen(output.c_str(), "w"); + gdImagePng(m_image, out); + fclose(out); + gdImageDestroy(m_image); +} + diff --git a/TileGenerator.h b/TileGenerator.h index 35338fc..8382148 100644 --- a/TileGenerator.h +++ b/TileGenerator.h @@ -10,6 +10,7 @@ #ifndef TILEGENERATOR_H_JJNUCARH #define TILEGENERATOR_H_JJNUCARH +#include #include #include #include @@ -54,6 +55,8 @@ private: void loadBlocks(); BlockPos decodeBlockPos(sqlite3_int64 blockId); int unsignedToSigned(long i, long max_positive); + void createImage(); + void writeImage(const std::string &output); private: std::string m_bgColor; @@ -66,6 +69,7 @@ private: bool m_drawUnderground; sqlite3 *m_db; + gdImagePtr m_image; int m_xMin; int m_xMax; int m_zMin;