思路:添加关键值key,然后RGB3个分量分别插值
#ifndef GRADCOLOR_HPP
#define GRADCOLOR_HPP
#include <map>
#include <vector>
class crgb{
public:
crgb(){
crgb(0,0,0,0);
}
crgb(int k, unsigned char _r, unsigned char _g, unsigned char _b):
keyval(k), r(_r), g(_g), b(_b){
}
public:
int keyval;
unsigned char r,g,b;
};
class gradcolor{
public:
static crgb getColor(int val, crgb* v, int n){
float gainr,gaing,gainb;
for (int i = 0; i < n - 1; ++i) {
if (val >= v[i].keyval && val <= v[i+1].keyval){
gainr = double(v[i + 1].r - v[i].r) / double(v[i + 1].keyval - v[i].keyval);
gaing = double(v[i + 1].g - v[i].g) / double(v[i + 1].keyval - v[i].keyval);
gainb = double(v[i + 1].b - v[i].b) / double(v[i + 1].keyval - v[i].keyval);
return crgb(val, v[i].r + gainr, v[i].g + gaing, v[i].b + gainb);
}
}
}
int calc(){
crgb keycolor[6] = {crgb(0,0,0,255),crgb(51,0,255,255),crgb(102,0,255,0),
crgb(153,255,255,0),crgb(204,255,170,0),crgb(255,255,0,0)};
for (int i = 0; i < 256; ++ i) {
grad.insert(std::make_pair(i,getColor(i, keycolor, 6)));
}
return 1;
}
public:
std::map<int, crgb> grad;
};
#endif // GRADCOLOR_HPP