#ifndef COLORSCALE_H #define COLORSCALE_H #include #include #include class ColorScale { public: ColorScale(const QColor &firstColor, const QColor &lastColor); ColorScale(std::initializer_list colors); ColorScale(const QList &colors); virtual ~ColorScale(); QColor operator ()(float t) const { return color(t); } virtual QColor color(float t) const; void setExtents(float min, float max); float min() const { return m_min; } float max() const { return m_max; } template void sample(int samples, OutputIterator it) const; protected: float m_min, m_max; QList m_colors; }; template void ColorScale::sample(int samples, OutputIterator it) const { if (samples < 1) { return; } float step = (max() - min()) / samples; qreal r, g, b; for (float t = min(); t < max(); t += step) { color(t).getRgbF(&r, &g, &b); *it = r; it++; *it = g; it++; *it = b; it++; } } #endif // COLORSCALE_H