2011-11-22 2 views
0

RGB 색상 이미지를 HSV 색상 공간으로 변환하고 트랙 바를 사용하여 색조를 변경 한 다음 RGB 값으로 다시 변환합니다. 이 methord는 잘 작동하고 흰색과 검은 색 픽셀을 제외하고 색이 바뀝니다. 그게 왜?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

포화 = (최대 == 0)? 0 : 1d - (1d * min/max)이 코드에서 어떻게됩니까? –