#include "complimentary_colour_extractor.h" #include // CONSTRUCTORS ComplimentaryColourExtractor::ComplimentaryColourExtractor(struct ColourHSV hsv, size_t h_levels, size_t s_levels, size_t v_levels) :ColourExtractor(h_levels, s_levels, v_levels), m_main_colour(hsv) { } // PROTECTED FUNCS size_t ComplimentaryColourExtractor::evaluate_colour(struct ColourHSV hsv, double weight) const { size_t result = 0; double angle_delta; double additional_colour_weight; if ((0.0 == hsv.s) || (0.0 == m_main_colour.s)) { angle_delta = 180.0; additional_colour_weight = 0.5; } else { additional_colour_weight = 1.0; /* SECTION BEGIN */ angle_delta = fabs(hsv.h - m_main_colour.h); if (angle_delta > 180.0F) { angle_delta = 360.0F - angle_delta; } /* SECTION END */ } // result = static_cast(round(1000.0 * pow(weight, 0.3) * hsv.v * // fmin(1.0, hsv.v + hsv.s) * additional_colour_weight * angle_delta)); result = static_cast(round(1000.0 * pow(weight, 0.3) * hsv.v * additional_colour_weight * angle_delta)); return result; } // PUBLIC FUNCS struct ColourHSV ComplimentaryColourExtractor::get_main_colour() const { return m_main_colour; } void ComplimentaryColourExtractor::set_main_colour(struct ColourHSV hsv) { m_main_colour = hsv; }