Манипулирование цветами в .NET – часть первая - I – Цветовые модели. RGB

ОГЛАВЛЕНИЕ

I – Цветовые модели

RGB (красный, зелёный, синий)

Цветовая модель RGB (красный, зеленый, синий) является наиболее известной и самой используемой повседневно. Она определяет пространство цветов в виде трех компонентов:
Красный – в диапазоне 0-255
Зеленый – в диапазоне 0-255
Синий – в диапазоне 0-255

Цветовая модель RGB является суммируемой, то есть значения красного, зеленого и синего (называемые тремя основными цветами) комбинируются для воспроизводства других цветов.

Например, цвет "красный" представляется как [R=255, G=0, B=0], "фиолетовый" как [R=238, G=130, B=238] и т. д.

Ее типичным графическим представлением является следующее изображение:

В .NET структура Color использует эту модель для обеспечения поддержки цвета посредством свойств R, G и B.

Console.WriteLine(String.Format("R={0}, G={1}, B={2}",
Color.Red.R, Color.Red.G, Color.Red.B);
Console.WriteLine(String.Format("R={0}, G={1}, B={2}",
Color.Cyan.R, Color.Cyan.G, Color.Cyan.B);
Console.WriteLine(String.Format("R={0}, G={1}, B={2}",
Color.White.R, Color.White.G, Color.White.B);
Console.WriteLine(String.Format("R={0}, G={1}, B={2}",
Color.SteelBlue.R, Color.SteelBlue.G, Color.SteelBlue.B);

// и т.д.

но это не единственное ее применение. Поэтому можно определить специальную структуру RGB для дальнейшего кодирования, как показано ниже:

/// <summary>
/// структура RGB.
/// </summary>
public struct RGB
{
/// <summary>
/// получает пустую структуру RGB;
/// </summary>
public static readonly RGB Empty = new RGB();

private int red;
private int green;
private int blue;

public static bool operator ==(RGB item1, RGB item2)
{
return (
item1.Red == item2.Red
&& item1.Green == item2.Green
&& item1.Blue == item2.Blue
);
}

public static bool operator !=(RGB item1, RGB item2)
{
return (
item1.Red != item2.Red
|| item1.Green != item2.Green
|| item1.Blue != item2.Blue
);
}

/// <summary>
/// получает или устанавливает значение красного.
/// </summary>
public int Red
{
get
{
return red;
}
set
{
red = (value>255)? 255 : ((value<0)?0 : value);
}
}

/// <summary>
/// получает или устанавливает значение зеленого.
/// </summary>
public int Green
{
get
{
return green;
}
set
{
green = (value>255)? 255 : ((value<0)?0 : value);
}
}

/// <summary>
/// получает или устанавливает значение синего.
/// </summary>
public int Blue
{
get
{
return blue;
}
set
{
blue = (value>255)? 255 : ((value<0)?0 : value);
}
}

public RGB(int R, int G, int B)
{
this.red = (R>255)? 255 : ((R<0)?0 : R);
this.green = (G>255)? 255 : ((G<0)?0 : G);
this.blue = (B>255)? 255 : ((B<0)?0 : B);
}

public override bool Equals(Object obj)
{
if(obj==null || GetType()!=obj.GetType()) return false;

return (this == (RGB)obj);
}

public override int GetHashCode()
{
return Red.GetHashCode() ^ Green.GetHashCode() ^ Blue.GetHashCode();
}
}
Читайте также:
  • Назад к основам – обобщенные структуры данных и алгоритмы в .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 Кб Введение Природа предоставляет присущие ей методы для решения задач оптимизации, называемые генетическими алгоритмами. Живые организмы эволюционируют, адаптируются к меняющимся условиям, спариваются и производят индивидуумов, еще боле...