我想使用算法將HSV顏色值轉換爲RGB顏色,以計算200 x 200 RGB位圖,其邊角和雙線性顏色爲紅色,綠色,藍色和白色在其他地方插入HSV顏色並用雙線性內插RGB顏色計算位圖。我在wikipedia中找到了公式,但我很困惑如何做到這一點。RGB顏色位圖和HSV雙線性內插顏色
任何幫助,將不勝感激。
我想使用算法將HSV顏色值轉換爲RGB顏色,以計算200 x 200 RGB位圖,其邊角和雙線性顏色爲紅色,綠色,藍色和白色在其他地方插入HSV顏色並用雙線性內插RGB顏色計算位圖。我在wikipedia中找到了公式,但我很困惑如何做到這一點。RGB顏色位圖和HSV雙線性內插顏色
任何幫助,將不勝感激。
好吧,我想我知道你在做什麼。我還沒有試圖運行任何這個,所以它可能有一些錯誤...
首先,你需要計算紅色,綠色,藍色和白色的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;
}
}
應該這樣做,給予或採取。那麼,至少應該給你一個粗略的想法。
謝謝你的回答。這真的很有幫助。 – kokosg
語言?技術?一些真正的起點? – Ken
C++首選語言。 – kokosg