【问题标题】:RGB color bitmap and HSV bilinearly interpolated colorsRGB 颜色位图和 HSV 双线性插值颜色
【发布时间】:2012-10-08 08:46:54
【问题描述】:

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

任何帮助将不胜感激。

【问题讨论】:

  • 语言 ?技术?真实的东西作为起点?

标签: math graphics colors rgb hsv


【解决方案1】:

好的,我想我知道你在说什么。我没有尝试运行任何这个,所以它可能有一些错误......

首先,您需要计算出红色、绿色、蓝色和白色的 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;
  }
}

应该这样做,给予或接受。好吧,至少应该给你一个粗略的想法。

【讨论】:

  • 感谢您的回答。这真的很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
  • 2016-05-08
相关资源
最近更新 更多