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;
}
確實:只有黑色,白色和灰色變化的亮度。飽和度(可以被認爲是顏色強度)是0,因此色調(顏色)沒有效果。 –
saturation =(max == 0)? 0:1d - (1d * min/max)在這段代碼中發生了什麼? –