Манипулирование цветами в .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);
}
Читайте также:
  • Назад к основам – обобщенные структуры данных и алгоритмы в .NET 2.0
    •    Скачать исходники - 265.8 Кб (с тестами NUnit)•    Скачать двоичные файлы - 40.5 Кб•    Домашняя страница проекта NGenerics (CodePlex)Статья не дает все подробности и полные описания внутреннего устройства этих коллекций и алгоритмов - наоборот, она дает ссылки на имеющиеся в интернете ресурс...
  • Определение цен барьерных опционов с помощью сеток. Часть первая – постоянные барьеры
    •    Скачать демонстрационный проект - 5.26 Кб•    Скачать исходники - 12.2 Кб Введение Стоит отметить, что представленный метод можно расширить до вмещения опционов с несколькими постоянными барьерами. После изучения простого примера перейдем к более сложным опционам с изменяющимися во времени ...
  • FuzzyAdvisor – простая экспертная система с нечеткой логикой на F#
    •    Скачать исходники - 108 Кб Введение Более 15 лет назад разрабатывали проект (Brulé и др., 1995), требовавший экспертную систему, выбирающую подходящий вариант исходя из некоторых основных параметров. Были опробованы несколько подходов, в том числе использование исчисления предикатов (...
  • Нейронные сети на C#
    •    Скачать исходники - 251 Кб•    Скачать демонстрационный проект - 181 Кб Введение История нейронных сетей начинается в 1950-х гг., когда была представлена архитектура простейших нейронных сетей. После начальной работы в области идея нейронных сетей стала весьма популярной. Но затем область...
  • Генетические алгоритмы в задачах классификации искусственных нейронных сетей
    •    Скачать демо - 99.6 Кб•    Скачать исходники - 25.2 Кб Введение Природа предоставляет присущие ей методы для решения задач оптимизации, называемые генетическими алгоритмами. Живые организмы эволюционируют, адаптируются к меняющимся условиям, спариваются и производят индивидуумов, еще боле...