Страница: 1 |
Страница: 1 |
Вопрос: Как нарисовать спектр
Добавлено: 17.02.05 07:54
Автор вопроса: ZagZag | ICQ: 295002202
Чтобы не нагружать программу всякими картинками я решил что лучше спект не
хранить в файле программы, а рисовать его самой программой... но незнаю по
какому принципу это делается :(
Может кто уже делал нечто подобное? Поделитесь кодом или просто расскажите
принцип.
Меня именно интересует как нарисовать плавный переход от красного к
фиолетовому (для примера см. диалог выбора цвета > дополнительно)
Думаю на оттенки яркий-черный я сам смогу размазать, хотя это тоже бы не
помишало :)
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #1
Добавлено: 17.02.05 08:22
1) R=255; G=0; B=0
2) G 0 -> 255
3) R 255 -> 0
4) B 0 -> 255
5) G 255 -> 0
6) R 0 -> 255
7) B 255 -> 0
Номер ответа: 2
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #2
Добавлено: 17.02.05 14:51
Вот функция синусоидального спектра:
Function HueSinRGB(ByVal Hue& As Long
Select Case Hue Mod 1620
Case 0 To 269
HueSinRGB = DRGB(255, SinToRGB(Cos(DegToRad(Hue / 3 * 2))), 0)
Case 270 To 539
HueSinRGB = DRGB(255 - SinToRGB(Cos(DegToRad((Hue - 270) / 3 * 2))), 255, 0)
Case 540 To 809
HueSinRGB = DRGB(0, 255, SinToRGB(Cos(DegToRad((Hue - 540) / 3 * 2))))
Case 810 To 1079
HueSinRGB = DRGB(0, 255 - SinToRGB(Cos(DegToRad((Hue - 810) / 3 * 2))), 255)
Case 1080 To 1349
HueSinRGB = DRGB(SinToRGB(Cos(DegToRad((Hue - 1080) / 3 * 2))), 0, 255)
Case 1350 To 1619
HueSinRGB = DRGB(255, 0, 255 - SinToRGB(Cos(DegToRad((Hue - 1350) / 3 * 2))))
End Select
End Function
Private Function SinToRGB(Sine!) As Long
SinToRGB = (255 - Int(Sine * 255)) / 2
End Function
Синусоидальный спектр выглядит получше линейного, но если тебе нужен именно линейный - могу дать.
Номер ответа: 3
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #3
Добавлено: 17.02.05 14:52
DRGB меняй на RGB.
Номер ответа: 4
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #4
Добавлено: 17.02.05 14:55
Диапазон функции - 1620 значений. Вот это еще нужно:
Const pi = 3.14159265358979
Const pi_Prop = 360 / (pi * 2)
Function DRGB(ByVal R&, ByVal G&, ByVal b& As Long
If R > 255 Then R = 255
If G > 255 Then G = 255
If b > 255 Then b = 255
If R < 0 Then R = 0
If G < 0 Then G = 0
If b < 0 Then b = 0
DRGB = R + G * 256 + b * 65536
End Function
Function DegToRad(ByVal Num!) As Single
DegToRad = Num / pi_Prop
End Function