diff --git a/CMakeLists.txt b/CMakeLists.txt index cea54e3..a0ea226 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required (VERSION 3.2) project(identiconpp - VERSION 0.3.2 + VERSION 0.3.3 LANGUAGES CXX ) diff --git a/src/checks.cpp b/src/checks.cpp index 68a3588..655107b 100644 --- a/src/checks.cpp +++ b/src/checks.cpp @@ -42,14 +42,14 @@ void Identiconpp::check_entropy(const string &digest, algorithm type) // We need bits for each field in half of the columns, +1 column if // they are uneven. Then we need enough bits to pick a color. entropy_required = (_columns / 2 + _columns % 2) * _rows - + std::log2(_foreground.size()) + 1; + + std::floor(std::log2(_foreground.size())) + 1; break; } case algorithm::ltr_asymmetric: { entropy_provided = digest.length() * 4; entropy_required = _columns * _rows - + std::log2(_foreground.size()) + 1; + + std::floor(std::log2(_foreground.size())) + 1; break; } case algorithm::sigil: diff --git a/src/identiconpp.cpp b/src/identiconpp.cpp index b692ec9..9302bff 100644 --- a/src/identiconpp.cpp +++ b/src/identiconpp.cpp @@ -46,7 +46,8 @@ Magick::Image Identiconpp::generate(const string &digest, const uint16_t width) ttdebug << "Using digest: " << digest << '\n'; check_entropy(digest, _type); const uint16_t imgwidth = width - _padding[0] * 2; - const uint16_t imgheight = imgwidth / _columns * _rows; + const uint16_t imgheight = + std::round(static_cast(imgwidth) / _columns * _rows); ttdebug << "width: " << std::to_string(imgwidth + _padding[0] * 2) << ", height: " << std::to_string(imgheight + _padding[1] * 2) << "\n"; @@ -101,7 +102,7 @@ Magick::Color Identiconpp::get_color(const uint16_t firstbit, const string &digest) { // Number of bits to use - const uint16_t colorbits = std::log2(_foreground.size()) + 1; + const uint16_t colorbits = std::floor(std::log2(_foreground.size())) + 1; // Extract approximation std::stringstream ss;