1

HSVカラー値をRGBカラーに変換するアルゴリズムを使用して、コーナーに赤、緑、青、白の色を使用し、他の場所でHSV色を双線形に補間した200 x 200 RGBビットマップを計算し、双線形でビットマップも計算したいと思います。補間されたRGBカラー。ウィキペディアで数式を見つけましたが、これを行う方法について混乱しています。

どんな助けでもいただければ幸いです。

4

1 に答える 1

1

OK、私はあなたが何をしているのか知っていると思います。私はこれを実行しようとしたことがないので、おそらくいくつかのバグがあります...

まず、赤、緑、青、白の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ます。方向ごとに1回だけ実行します。

次に、ウィキペディアの記事の規則を使用して、それらを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;
  }
}

それはそれをするべきです、与えるか取るか。まあ、少なくとも大まかなアイデアを与える必要があります。

于 2012-10-21T02:50:31.773 に答える