HSVカラー値をRGBカラーに変換するアルゴリズムを使用して、コーナーに赤、緑、青、白の色を使用し、他の場所でHSV色を双線形に補間した200 x 200 RGBビットマップを計算し、双線形でビットマップも計算したいと思います。補間されたRGBカラー。ウィキペディアで数式を見つけましたが、これを行う方法について混乱しています。
どんな助けでもいただければ幸いです。
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;
}
}
それはそれをするべきです、与えるか取るか。まあ、少なくとも大まかなアイデアを与える必要があります。