From bfd4deb7c7f207a8ca798dbcfd9f1b7c8a8a3aa9 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Mon, 7 Apr 2014 18:13:16 +0000 Subject: [PATCH] Used floating point for colour interpolation in palettes since QColor is float internally anyway. Avoided invalid colour values in palette colour interpolation. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@3989 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- WFPalette.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/WFPalette.cpp b/WFPalette.cpp index af4754f49..896025d0a 100644 --- a/WFPalette.cpp +++ b/WFPalette.cpp @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -22,6 +23,7 @@ #include #include #include +#include #include "qt_helpers.hpp" @@ -290,11 +292,11 @@ QVector WFPalette::interpolate () const --prior; } - int increment {i - interval * prior}; - int r {colours[prior].red () + int((increment * (colours[next].red () - colours[prior].red ()))/interval)}; - int g {colours[prior].green () + int((increment * (colours[next].green () - colours[prior].green ()))/interval)}; - int b {colours[prior].blue () + int((increment * (colours[next].blue () - colours[prior].blue ()))/interval)}; - result.append (QColor {r, g, b}); + auto increment = i - interval * prior; + qreal r {std::max (0., colours[prior].redF () + (increment * (colours[next].redF () - colours[prior].redF ()))/interval)}; + qreal g {std::max (0., colours[prior].greenF () + (increment * (colours[next].greenF () - colours[prior].greenF ()))/interval)}; + qreal b {std::max (0., colours[prior].blueF () + (increment * (colours[next].blueF () - colours[prior].blueF ()))/interval)}; + result.append (QColor::fromRgbF (r, g, b)); } return result;