#include "main_colour_extractor.h" #include // CONSTRUCTORS MainColourExtractor::MainColourExtractor(double lightness_threshold, size_t h_levels, size_t s_levels, size_t v_levels) :ColourExtractor(h_levels, s_levels, v_levels), m_lightness_threshold(lightness_threshold) { } // PRIVATE FUNCS double MainColourExtractor::calculate_lightness(struct ColourHSV hsv) const { double result = 0.0; struct ColourRGB rgb; rgb = HSVtoRGB(hsv); result = 0.299F * rgb.r + 0.587F * rgb.g + 0.114F * rgb.b; return result; } // PROTECTED FUNCS size_t MainColourExtractor::evaluate_colour(struct ColourHSV hsv, double weight) const { size_t result = 0; double lightness; lightness = calculate_lightness(hsv); if (lightness >= m_lightness_threshold) { result = static_cast(round(1000.0 * (pow(weight, 0.3) + 0.009999999776482582) * hsv.v * (hsv.s + 0.1))); } return result; } // PUBLIC FUNCS double MainColourExtractor::get_lightness_threshold() const { return m_lightness_threshold; } void MainColourExtractor::set_lightness_threshold(double value) { m_lightness_threshold = value; }