Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Как нарисовать спектр Добавлено: 17.02.05 07:54  

Автор вопроса:  ZagZag | ICQ: 295002202 
Чтобы не нагружать программу всякими картинками я решил что лучше спект не
хранить в файле программы, а рисовать его самой программой... но незнаю по
какому принципу это делается :(
Может кто уже делал нечто подобное? Поделитесь кодом или просто расскажите
принцип.
Меня именно интересует как нарисовать плавный переход от красного к
фиолетовому (для примера см. диалог выбора цвета > дополнительно)
Думаю на оттенки яркий-черный я сам смогу размазать, хотя это тоже бы не
помишало :)

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #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

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам