好的,我想我知道你在说什么。我没有尝试运行任何这个,所以它可能有一些错误......
首先,您需要计算出红色、绿色、蓝色和白色的 HSV 值。顺时针调用这些,a,b,c,d - 例如,白色将是 [0,0,1] 或类似缩放的东西
对于网格中的一个位置,(x,y) 和0 <= x <= 1 的插值位类似于,将值放入数组out:
for(int i=0; i<3; i++){
out[i] = y*((x*a[i]) + ((1-x)*b[i])) + (1-y)*((x*d[i]) + ((1-x)*c[i]));
}
在寻找线性插值时,A 和 B 之间的 x 分数由 x*A + (1-x)*B 给出。每个方向只需执行一次。
然后使用维基百科文章中的约定将它们转换为 RGB
void HSVtoRGB(double H, double S, double V, double[] out){
double C = S*V;
double H_prime = H/60; // a number in [0,3]
double X = C*(1 - abs((H_prime%2)-1));
// Do the big if bit
switch((int)X){
case 0:
out[0] = C;
out[1] = X;
out[2] = 0;
case 1:
out[0] = X;
out[1] = C;
out[2] = 0;
// etc etc
}
double m = V - C;
for(int i=0; i<3; i++){
out[i] += m;
}
}
应该这样做,给予或接受。好吧,至少应该给你一个粗略的想法。