Make a function for generating colors and use it in color_map_generation

This commit is contained in:
Maxime Gimeno 2019-04-25 16:04:47 +02:00
parent fedc3eabef
commit 007f999feb
3 changed files with 19 additions and 26 deletions

View File

@ -3,6 +3,16 @@
#include <QColor> #include <QColor>
inline QColor generate_color(double h, double s_min = 0.35)
{
std::size_t s_max=255;
if(h >0.8 && h < 0,95) //span of ugly pink, desaturates make it less garish IMO
s_max = 160;
std::size_t s = std::rand() % (s_max-static_cast<std::size_t>(s_min*255)) +s_min*255;
return QColor::fromHsvF(h,s/255.0,1.0);
}
template <typename Output_color_iterator> template <typename Output_color_iterator>
Output_color_iterator Output_color_iterator
compute_color_map(QColor base_color, compute_color_map(QColor base_color,
@ -12,24 +22,19 @@ compute_color_map(QColor base_color,
qreal hue = base_color.hueF(); qreal hue = base_color.hueF();
const qreal step = ((qreal)1) / nb_of_colors; const qreal step = ((qreal)1) / nb_of_colors;
int s = base_color.saturation(),
v = base_color.value();
s = s<90 ? s+90 : s;
v = v<90 ? v+90 : v;
float sf=s/256.0f,
vf=v/256.0f;
qreal h = hue==-1 ? 0 qreal h = hue==-1 ? 0
:hue; :hue;
for(unsigned i = 0; i < nb_of_colors; ++i) { for(unsigned i = 0; i < nb_of_colors; ++i) {
if (h!=-1) h += step; if (h!=-1) h += step;
if ( h > 1 ) { h -= 1; } if ( h > 1 ) { h -= 1; }
//avoid S and V near 0 to avoid having all the same colors *out++ = generate_color(h);
*out++ = QColor::fromHsvF(h,
sf,
vf);
} }
return out; return out;
} }
inline QColor generate_random_color() {
std::size_t h = static_cast<std::size_t>(std::rand() % 360);
return generate_color(h/359.0);
}
#endif #endif

View File

@ -60,8 +60,7 @@ std::size_t VSA_wrapper::add_one_proxy() {
break; break;
} }
if (nb_added == 1) { if (nb_added == 1) {
const std::size_t h = (rand_0_310()+ 340)%359, s = rand_70_255(); m_proxy_colors.push_back(generate_random_color());
m_proxy_colors.push_back(QColor::fromHsvF(h/359.0,s/255.0,1.0));
} }
return nb_added; return nb_added;
@ -94,8 +93,7 @@ bool VSA_wrapper::split(const std::size_t px_idx, const std::size_t n, const std
} }
if (splitted) { if (splitted) {
for (std::size_t i = m_proxy_colors.size(); i < number_of_proxies(); ++i) { for (std::size_t i = m_proxy_colors.size(); i < number_of_proxies(); ++i) {
const std::size_t h = (rand_0_310()+ 340)%359,s=rand_70_255(); m_proxy_colors.push_back(generate_random_color());
m_proxy_colors.push_back(QColor::fromHsvF(h/359.0,s/255.0,1.0));
} }
} }

View File

@ -97,15 +97,6 @@ class VSA_WRAPPER_EXPORT VSA_wrapper {
Compact_metric, EPICK> Compact_approx; Compact_metric, EPICK> Compact_approx;
#endif #endif
std::size_t rand_0_310() {
return static_cast<std::size_t>(std::rand() % 310);
}
std::size_t rand_70_255() {
return static_cast<std::size_t>(std::rand() % 185 + 70);
}
public: public:
enum Metric { L21, L2, Compact }; enum Metric { L21, L2, Compact };
@ -165,8 +156,7 @@ public:
m_proxy_colors.reserve(number_of_proxies()); m_proxy_colors.reserve(number_of_proxies());
for (std::size_t i = 0; i < number_of_proxies(); ++i) { for (std::size_t i = 0; i < number_of_proxies(); ++i) {
const std::size_t h = (rand_0_310()+ 340)%360,s=rand_70_255(); m_proxy_colors.push_back(generate_random_color());
m_proxy_colors.push_back(QColor::fromHsvF(h/359.0,s/255.0,1.0));
} }
m_initialized = true; m_initialized = true;