• Алгоритмы

Манипулирование цветами в .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);
}