2011-11-22 294 views
0

即時將RGB彩色圖像轉換爲HSV顏色空間,並使用軌跡欄更改色相併將其轉換回RGB值。這種方法工作正常,並改變顏色,除了白色和黑色像素。這是爲什麼?使用HSV顏色空間更改白色和黑色顏色

public static Color ColorFromHSV(double hue, double saturation, double value) 
{ 
    int hi = Convert.ToInt32(Math.Floor(hue/60)) % 6; 
    double f = hue/60 - Math.Floor(hue/60); 

    value = value * 255; 
    int v = Convert.ToInt32(value); 
    int p = Convert.ToInt32(value * (1 - saturation)); 
    int q = Convert.ToInt32(value * (1 - f * saturation)); 
    int t = Convert.ToInt32(value * (1 - (1 - f) * saturation)); 

    if (hi == 0) 
     return Color.FromArgb(255, v, t, p); 
    else if (hi == 1) 
     return Color.FromArgb(255, q, v, p); 
    else if (hi == 2) 
     return Color.FromArgb(255, p, v, t); 
    else if (hi == 3) 
     return Color.FromArgb(255, p, q, v); 
    else if (hi == 4) 
     return Color.FromArgb(255, t, p, v); 
    else 
     return Color.FromArgb(255, v, p, q); 
} 

public void convertToHSV(Color color, out double hue, out double saturation, out double value) 
     { 
      int max = Math.Max(color.R, Math.Max(color.G, color.B)); 
      int min = Math.Min(color.R, Math.Min(color.G, color.B)); 

      hue = color.GetHue(); 
      saturation = (max == 0) ? 0 : 1d - (1d * min/max); 
      value = max/255d; 

     } 

回答

3

這是因爲白色,灰色和黑色都沒有色調,所以如果他們的色調被改變,它們不會改變。

+0

確實:只有黑色,白色和灰色變化的亮度。飽和度(可以被認爲是顏色強度)是0,因此色調(顏色)沒有效果。 –

+0

saturation =(max == 0)? 0:1d - (1d * min/max)在這段代碼中發生了什麼? –