PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » DrawingMode()


DrawingMode()

Сообщений 1 страница 7 из 7

1

Коллеги!
В справке вроде написано, что для данной функции можно использовать оператор OR ("|"):

Код:
  DrawingMode(#PB_2DDrawing_Gradient | #PB_2DDrawing_Transparent)

Т.е. я сперва рисую градиентный прямоугольник, а затем на него текст.
В в/у виде у меня текст не выводился.
Всё заработало после разбития функции на две части.
Т.е. сперва:

Код:
  DrawingMode(#PB_2DDrawing_Gradient

и рисую прямоугольник,
а затем:

Код:
  DrawingMode(#PB_2DDrawing_Transparent)

и рисую текст.

Т.е. получается, что для каждого рисования необходима своя функция DrawingMode().
Всё правильно, или я что-то не так понимаю? :rolleyes:

P.S.: Малость не по теме, но давно хочу спросить: чем отличается раздел "Вопросы по PureBasic" от раздела "Программирование на PureBasic"?

Отредактировано Gregory (12.05.2021 13:07:03)

0

2

есть такая непонятка, не заморачивайся, если не так, значит эдак
думаю что причина во взаимоисключении, так что научный тык в помощь :D

0

3

Gregory написал(а):

В в/у виде у меня текст не выводился.

Код:
  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|#PB_2DDrawing_Transparent)
      BackColor($00FFFF)
      FrontColor($FF0000)
      
      LinearGradient(0, 0, 200, 200)    
      Circle(100, 100, 100)   
      LinearGradient(350, 100, 250, 100)
      Circle(300, 100, 100)
      
      For i = 1 To 30
        DrawText(Random(400), Random(200), "Hello World!")
      Next i

      
      StopDrawing() 
      ImageGadget(0, 0, 0, 400, 200, ImageID(0))
    EndIf
    
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
  EndIf
Код:
If OpenWindow(0, 0, 0, 500, 100, "Alphachannel demo", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  LoadFont(0, "Impact", 30)
  ;
  If CreateImage(0, 500, 100, 32) And StartDrawing(ImageOutput(0))

    DrawingMode(#PB_2DDrawing_AlphaChannel)
    Box(0, 0, 500, 100, $00000000)
   
    
    DrawingFont(FontID(0))
    DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Transparent|#PB_2DDrawing_Gradient)   
    LinearGradient(10, 10, 310+TextWidth("Alphachannel Gradient demo"), 10+TextHeight("Alphachannel Gradient demo"))
    GradientColor(0.0,  $80FF0000)
    GradientColor(0.25, $FF00FF00)
    GradientColor(0.50, $8000FFFF)
    GradientColor(0.75, $FF0000FF)
    GradientColor(1.0,  $80FF0000)
    DrawText(10, 10, "Alphachannel Gradient demo")

    
    StopDrawing()
  EndIf
 
  ImageGadget(0, 0, 0, 0, 0, ImageID(0))
 
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

0

4

Gregory написал(а):

чем отличается раздел "Вопросы по PureBasic" от раздела "Программирование на PureBasic"?

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

0

5

Пётр, это примеры из справки, насколько помню?
В первом примере попробуйте изменить цвет выводимого текста. :)
А вот если сделать так, как я выше говорил, то всё заработает.
А второй маленько про другое.

AZJIO написал(а):

можно поделиться программой

Так для этого специальный раздел, вроде, имеется.
А в/у разделе такие же вопросы, как и в этом. :yep:

0

6

Gregory написал(а):

В первом примере попробуйте изменить цвет выводимого текста.

Из справки

#PB_2DDrawing_Gradient
Этот режим позволяет рисовать градиентом вместо сплошного цвета. Вид градиента можно задать командами вроде LinearGradient(), CircularGradient() и т.д., а цвета градиента можно установить с помощью функции GradientColor(). Параметры цвета, заданные отдельным командам рисования, в этом режиме игнорируются. Этот режим можно сочетать с описанными выше режимами с прозрачностью для получения градиентов с полупрозрачными цветами.

Все работает согласно документации.
Второй пример показывает вывод текста с градиентным цветом. При этом #PB_2DDrawing_Transparent работает как положено. Упростил пример.

Код:
If OpenWindow(0, 0, 0, 500, 80, "Alphachannel demo", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  LoadFont(0, "Impact", 30)

  If CreateImage(0, 500, 80) And StartDrawing(ImageOutput(0))

    Box(0, 0, 500, 80, $FFFFFF)
    DrawingFont(FontID(0))
    DrawingMode(#PB_2DDrawing_Transparent|#PB_2DDrawing_Gradient)
    LinearGradient(0, 0, 500, 80)
    GradientColor(0.0,  $FF0000)
    GradientColor(1.0,  $00FF00)
    DrawText(10, 10, "Alphachannel Gradient demo")
    StopDrawing()
  EndIf
 
  ImageGadget(0, 0, 0, 0, 0, ImageID(0))
 
  Repeat
  Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Если убрать #PB_2DDrawing_Transparent то фон теста не будет прозрачным, то есть код работает верно.

Gregory написал(а):

А вот если сделать так, как я выше говорил, то всё заработает.

Если вам не нужен градиентный цвет теста, то не смешивайте режимы #PB_2DDrawing_Transparent и #PB_2DDrawing_Gradient.

0

7

Пётр написал(а):

не смешивайте режимы

Так я об этом же. :)

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » DrawingMode()