purebasic.info

PureBasic forum
Текущее время: Вс июл 22, 2018 11:38 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Изменить цвет
СообщениеДобавлено: Чт дек 28, 2017 7:08 pm 
Не в сети
студент

Зарегистрирован: Сб дек 09, 2017 4:53 am
Сообщений: 9
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
С наступающим вас!
Подскажите, как плавно изменить цвет1 на цвет2 ?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Изменить цвет
СообщениеДобавлено: Чт дек 28, 2017 8:05 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6327
Благодарил (а): 19 раз.
Поблагодарили: 189 раз.
Пункты репутации: 48
Если имеется в виду градиент, то есть в справке
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
If OpenWindow(0, 0, 0, 400, 200, "2DDrawing Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    If CreateImage(0, 400, 200) And StartDrawing(ImageOutput(0))
      Box(0, 0, 400, 200, $FFFFFF)
     
      DrawingMode(#PB_2DDrawing_Gradient)      
      BackColor($00FFFF)
      FrontColor($FF0000)
     
      LinearGradient(0, 0, 200, 200)    
      Circle(100, 100, 100)  
      LinearGradient(350, 100, 250, 100)
      Circle(300, 100, 100)
     
      StopDrawing()
      ImageGadget(0, 0, 0, 400, 200, ImageID(0))
    EndIf
   
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
  EndIf
 


Или что то другое?

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Изменить цвет
СообщениеДобавлено: Чт дек 28, 2017 9:25 pm 
Не в сети
студент

Зарегистрирован: Сб дек 09, 2017 4:53 am
Сообщений: 9
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Я имел ввиду изменение цвета (морфинг так сказать) одного цвета в другой.
Например создаем окно, делаем его красным и вызываем процедуру ChangeColor(#Red, #Green, Steps)
и окно плавно меняет цвет от красного к зеленому (steps - условное количество промежуточных шагов\цветов чтобы контролировать скорость перехода, мб как-то еще это реализуется, мне в голову такой вариант пришел).


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Изменить цвет
СообщениеДобавлено: Чт дек 28, 2017 10:06 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6327
Благодарил (а): 19 раз.
Поблагодарили: 189 раз.
Пункты репутации: 48
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Button_0
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 725, 142, 400, 400, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
     AddWindowTimer(0, 123, 10)
   EndIf
EndProcedure
 
OpenWindow_Window_0()
SetWindowColor(#Window_0, RGB(255,0,0))
;{- Event loop
Repeat
  Event = WaitWindowEvent()
  Select Event
       Case #PB_Event_Timer
      If i<254:i+1:Else: i=0:EndIf
      SetWindowColor(#Window_0, RGB(255-i,i,0))
     
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
ForEver
;
;}
 


_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Изменить цвет
СообщениеДобавлено: Чт дек 28, 2017 10:23 pm 
Не в сети
студент

Зарегистрирован: Сб дек 09, 2017 4:53 am
Сообщений: 9
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Да, это то что нужно, спасибо!
А как это оформить в виде универсальной процедуры чтобы на входе были 2 любых цвета?
Я так понимаю тут частный случай red --> green, при других значениях нужно немного иначе считать...


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Изменить цвет
СообщениеДобавлено: Пт дек 29, 2017 9:24 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Сб июл 18, 2009 8:25 am
Сообщений: 812
Откуда: Нерезиновая
Благодарил (а): 21 раз.
Поблагодарили: 4 раз.
Пункты репутации: 0
Можно сделать так

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Procedure MorphColor(Color1, Color2, iSteps)
 
  Protected x.f    = 1/iSteps
  Protected Color0 = Color1
 
  Repeat
    Sleep_(20) ; еще одна точка контроля анимации
    Color1 = RGB((1-x)*|!REG3XP3!>Red(Color0)+x*|!REG3XP3!>Red(Color2),(1-x)*|!REG3XP3!>Green(Color0)+x*|!REG3XP3!>Green(Color2),(1-x)*|!REG3XP3!>Blue(Color0)+x*|!REG3XP3!>Blue(Color2))
    x.f+1/iSteps
   
   
    StartDrawing(WindowOutput(0))
    Box(0,   0, 160, 320, Color1)
    StopDrawing()
  Until x>1
 
EndProcedure
 
 
OpenWindow(0,0,0,320,320,"Color2color",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
 
steps = 90
 
Repeat
 
  Color1.l = RGB(Random(255),Random(255),Random(255))
  Color2.l = RGB(Random(255),Random(255),Random(255))
 
  StartDrawing(WindowOutput(0))
  Box(160, 0, 160, 320, Color2)
  StopDrawing()
 
  MorphColor(Color1, Color2, steps) ; правильно делать такие штуки в потоке (для демки сойдет и так)
  Sleep_(500)
Until WindowEvent()=#PB_Event_CloseWindow
 
 



Парсер превратил код в какой-то треш, 8 строка выглядит так:
Color1 = RGB((1-x)*Red(Color0)+x*Red(Color2),(1-x)*Green(Color0)+x*Green(Color2),(1-x)*Blue(Color0)+x*Blue(Color2))


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: balex1978 и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB