Манипулирование цветами в .NET – часть первая - Преобразования CMYK и YUV
ОГЛАВЛЕНИЕ
Преобразования CMYK
a - CMYK в RGB
Правило преобразования приведено ниже:
Эквивалент на C# следующий:
/// <summary>
/// преобразует CMYK в RGB.
/// </summary>
public static Color CMYKtoRGB(double c, double m, double y, double k)
{
int red = Convert.ToInt32((1-c) * (1-k) * 255.0);
int green = Convert.ToInt32((1-m) * (1-k) * 255.0);
int blue = Convert.ToInt32((1-y) * (1-k) * 255.0);
return Color.FromArgb(red, green, blue);
}
b - CMYK в HSL
Ничего нового: правило преобразования заключается в преобразовании в RGB, а затем в HSL.
/// <summary>
/// преобразует CMYK в HSL.
/// </summary>
public static HSL CMYKtoHSL(double c, double m, double y, double k)
{
RGB rgb = CMYKtoRGB(c, m, y, k);
return RGBtoHSL(rgb.Red, rgb.Green, rgb.Blue);
}
c - CMYK в HSB
Ничего нового: правило преобразования заключается в преобразовании в RGB, а затем в HSB.
/// <summary>
/// преобразует CMYK в HSB.
/// </summary>
public static HSB CMYKtoHSB(double c, double m, double y, double k)
{
RGB rgb = CMYKtoRGB(c, m, y, k);
return RGBtoHSB(rgb.Red, rgb.Green, rgb.Blue);
}
d - CMYK в YUV
Ничего нового: правило преобразования заключается в преобразовании в RGB, а затем в YUV.
/// <summary>
/// преобразует CMYK в YUV.
/// </summary>
public static YUV CMYKtoYUV(double c, double m, double y, double k)
{
RGB rgb = CMYKtoRGB(c, m, y, k);
return RGBtoYUV(rgb.Red, rgb.Green, rgb.Blue);
}
Преобразования YUV
a - YUV в RGB
Правило преобразования приведено ниже:
Эквивалент на C# следующий:
/// <summary>
/// преобразует YUV в RGB.
/// </summary>
/// <param name="y">Y должен быть в [0, 1].</param>
/// <param name="u">U должен быть в [-0.436, +0.436].</param>
/// <param name="v">V должен быть в [-0.615, +0.615].</param>
public static RGB YUVtoRGB(double y, double u, double v)
{
RGB rgb = new RGB();
rgb.Red = Convert.ToInt32((y + 1.139837398373983740*v)*255);
rgb.Green = Convert.ToInt32((
y - 0.3946517043589703515*u - 0.5805986066674976801*v)*255);
rgb.Blue = Convert.ToInt32((y + 2.032110091743119266*u)*255);
return rgb;
}
b - YUV в HSL
Ничего нового: правило преобразования заключается в преобразовании в RGB, а затем в HSL.
/// <summary>
/// преобразует YUV в HSL.
/// </summary>
/// <param name="y">Y должен быть в [0, 1].</param>
/// <param name="u">U должен быть в [-0.436, +0.436].</param>
/// <param name="v">V должен быть в [-0.615, +0.615].</param>
public static HSL YUVtoHSL(double y, double u, double v)
{
RGB rgb = YUVtoRGB(y, u, v);
return RGBtoHSL(rgb.Red, rgb.Green, rgb.Blue);
}
c - YUV в HSB
Ничего нового: правило преобразования заключается в преобразовании в RGB, а затем в HSB.
/// <summary>
/// преобразует YUV в HSB.
/// </summary>
/// <param name="y">Y должен быть в [0, 1].</param>
/// <param name="u">U должен быть в [-0.436, +0.436].</param>
/// <param name="v">V должен быть в [-0.615, +0.615].</param>
public static HSB YUVtoHSB(double y, double u, double v)
{
RGB rgb = YUVtoRGB(y, u, v);
return RGBtoHSB(rgb.Red, rgb.Green, rgb.Blue);
}
d - YUV в CMYK
Ничего нового: правило преобразования заключается в преобразовании в RGB, а затем в CMYK.
/// <summary>
/// преобразует YUV в CMYK.
/// </summary>
/// <param name="y">Y должен быть в [0, 1].</param>
/// <param name="u">U должен быть в [-0.436, +0.436].</param>
/// <param name="v">V должен быть в [-0.615, +0.615].</param>
public static CMYK YUVtoCMYK(double y, double u, double v)
{
RGB rgb = YUVtoRGB(y, u, v);
return RGBtoCMYK(rgb.Red, rgb.Green, rgb.Blue);
}