Я хотел бы иметь перечисление Цветов на основе цветов радуги (красный... желтый... зеленый... синий...).
Я вижу в основном два способа сделать это:
Создайте таблицу поиска, содержащую некоторые важные ссылочные цвета, и интерполируйте между ними. Мне не нравится эта идея вообще.
Примените некоторую более или менее необычную математику. Вероятно, меньше, но я не вполне вижу, как это работает. Какие-либо идеи?
(О, и в то время как я сделал некоторых ТАК исследование, я не нашел хороших результатов. Если этот вопрос был уже отправлен, просто укажите на меня на местоположение, и я удалю это.)
Править: Я предпочел бы иметь этого независимого политика используемой технологии для отображения градиента. Например, что-то как GetRainbowColor (пускают в ход f) с f в пределах от 0 (красных) к 1 (фиалке) работало бы отлично.
Самый простой способ обработки - это получить ваш ввод в std:: wstring
(который логически является массивом wchar _ t
). Однако подстроки разделяются L ''
, и L '।' также будет отдельным. Например, можно вызвать input.find _ first _ of (L «।»)
В winforms (или что-либо в GDI +) можно использовать System.Drawing.Drawing2D.LinearGradientBrush для интерполяции.
Также может работать система WPF System.Windows.Media.GradityBrush. Это абстрактно, так что вы можете закончить с LinearGradityBrush WPF. Это в другом пространстве имен.
EDIT: поскольку вопрос был отредактирован, чтобы указать, что вы хотите быть независимым от технологий, я не думаю, что этот ответ применим. Пока я оставлю его здесь на случай, если кто-то ищет Градиенты в C #, но если кто-то сочтет это неугодным, я удалю ответ.
Я быстро проверил, можно ли хотя бы получить некоторые функции более независимым способом (например, получить массив Point или что-то еще). Похоже, это не так.
-121--2140035-Это проще, чем вы думаете.
Сначала требуется функция преобразования hsv или hsl в rgb. Вот код C # для этого преобразования .
Затем вы просто итерируете все возможные значения оттенка h
, сохраняя насыщенность
s и светимость l
постоянными.
Если вы хотите, чтобы 100 цвета радуги распределялись поровну:
for(double i = 0; i < 1; i+=0.01)
{
ColorRGB c = HSL2RGB(i, 0.5, 0.5);
//do something with the color
}
Вы также можете легко создать нужную функцию GetRainbowColor
в этом пути, добавив все эти цвета в список < ColorRGB >
и вернув соответствующий индексированный цвет.
Начните здесь: http://www.midnightkite.com/color.html
Вы можете интерпретировать это: http://www.physics.sfasu.edu/astro/color/spectra.html это FORTRAN, но довольно очевидно, что он делает.
Также, вы можете прочитать более подробно здесь: http://en.wikipedia.org/wiki/CIE_1931_color_space
Вот версия на Python: http://www.johnny-lin.com/py_code/wavelen2rgb.py
BTW, первый запрос в Google по C# - вот этот: http://miguelmoreno.net/sandbox/wavelengthtoRGB/default.aspx
В winforms (или чем-либо еще, использующем GDI +) вы можете использовать System.Drawing.Drawing2D.LinearGradientBrush для выполнения интерполяции для тебя.
WPF System.Windows.Media.GradientBrush также может работать. Это абстрактно, поэтому вы можете получить WPF LinearGradientBrush. Он находится в другом пространстве имен, чем другой.
РЕДАКТИРОВАТЬ: поскольку вопрос был отредактирован, чтобы указать, что вы хотите быть технически независимым, я не думаю, что этот ответ применим. Я собираюсь оставить его здесь на тот случай, если кто-то ищет градиенты на C #, но если кто-то сочтет это нежелательным, я удалю ответ.
Я быстро проверил, сможете ли вы получить хотя бы некоторые функции более независимым способом (например, получить массив Point или что-то в этом роде). Похоже, что это не так.