Math RGB颜色位图和HSV双线性插值颜色

Math RGB颜色位图和HSV双线性插值颜色,math,graphics,colors,rgb,hsv,Math,Graphics,Colors,Rgb,Hsv,我想使用将HSV颜色值转换为RGB颜色的算法来计算一个200 x 200 RGB位图,其中角点的颜色为红色、绿色、蓝色和白色,其他地方的颜色为双线性插值的HSV颜色,并计算具有双线性插值的RGB颜色的位图。我在中找到了公式,但我不知道如何做到这一点 任何帮助都将不胜感激。好的,我想我知道你的意思。我没有试过运行这些,所以它可能有一些bug 首先,您需要计算出红色、绿色、蓝色和白色的HSV值。把它们称为顺时针,a,b,c,d——例如,白色是[0,0,1]或类似的比例 对于网格中的一个位置,(x,y

我想使用将HSV颜色值转换为RGB颜色的算法来计算一个200 x 200 RGB位图,其中角点的颜色为红色、绿色、蓝色和白色,其他地方的颜色为双线性插值的HSV颜色,并计算具有双线性插值的RGB颜色的位图。我在中找到了公式,但我不知道如何做到这一点


任何帮助都将不胜感激。

好的,我想我知道你的意思。我没有试过运行这些,所以它可能有一些bug

首先,您需要计算出红色、绿色、蓝色和白色的HSV值。把它们称为顺时针,a,b,c,d——例如,白色是[0,0,1]或类似的比例


对于网格中的一个位置,
(x,y)
0好的,我想我知道你的意思。我没有试过运行这些,所以它可能有一些bug

首先,您需要计算出红色、绿色、蓝色和白色的HSV值。把它们称为顺时针,a,b,c,d——例如,白色是[0,0,1]或类似的比例


对于网格中的位置,
(x,y)
使用
0语言?技术?真正的起点?语言?技术?一些真实的东西作为起点?谢谢你的回答。那真的很有帮助。谢谢你的回答。这真的很有帮助。
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]));
}
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;
  }
}