2012-10-18 202 views
1

我想使用算法將HSV顏色值轉換爲RGB顏色,以計算200 x 200 RGB位圖,其邊角和雙線性顏色爲紅色,綠色,藍色和白色在其他地方插入HSV顏色並用雙線性內插RGB顏色計算位圖。我在wikipedia中找到了公式,但我很困惑如何做到這一點。RGB顏色位圖和HSV雙線性內插顏色

任何幫助,將不勝感激。

+0

語言?技術?一些真正的起點? – Ken

+0

C++首選語言。 – kokosg

回答

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; 
    } 
} 

應該這樣做,給予或採取。那麼,至少應該給你一個粗略的想法。

+0

謝謝你的回答。這真的很有幫助。 – kokosg