Farbverlauf von Farbe A zu Farbe B

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Farbverlauf von Farbe A zu Farbe B

Beitrag von Delle »

Hallo,

das liefert ja "nur" einen Farbverlauf zu schwarz:

Code: Alles auswählen

x.l=0
y.l=0
w.l=254
h.l=362

BackColor.l=RGB(255,0,0)

  CreateImage(5000,w,h)
  StartDrawing(ImageOutput(5000))

  For i=1 To h
    r.f=  Red  (BackColor)/100*(i/h*100)
    g.f=  Green(BackColor)/100*(i/h*100)
    b.f=  Blue (BackColor)/100*(i/h*100)
    Line(0,i,w,1,RGB(r,g,b))
    Next i
  
  
  StopDrawing()
  
Wie kann man es erweitern, dass es in eine 2. frei wählbare Farbe verläuft?[/code]
PB 6.21 | Win 11
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Farbverlauf von Farbe A zu Farbe B

Beitrag von Kiffi »

vielleicht ist dieser Code in der PureArea was für Dich.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Tanke, dessen Anpassung ging schneller als Selfcoding :)
PB 6.21 | Win 11
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@Delle

zu deinem Ursprubngscode mal auf die schnelle: die Schleifenvariable und höhe sind Longs,
wahrscheinlich bekommst du deshalb nicht die richtigen Floats raus innerhalb der Berechnungen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

links steht aber jeweils ne zuweisung zu float, pb sollte also alles als float auswerten.

so scheint es mit zwei farbe zu gehen:

Code: Alles auswählen

c1 = $ff2288
c2 = $00ff99

x.l=0
y.l=0
w.l=254
h.l=362

  CreateImage(5000,w,h)
  StartDrawing(ImageOutput(5000))
    For i=1 To h
      r.f=  Red(c1)   + (  Red(c2)-Red(c1) )  /100*(i/h*100)
      g.f=  Green(c1) + (Green(c2)-Green(c1)) /100*(i/h*100)
      b.f=  Blue(c1)  + ( Blue(c2)-Blue(c1))  /100*(i/h*100)
      Line(0,i,w,1,RGB(r,g,b))
    Next i
  StopDrawing()
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Es geht auch ohne Floats:

Code: Alles auswählen

Define c1.l, c2.l, x.l, y.l, w.l, h.l

c1 = $123456
c2 = $789ABC

x = 0
y = 0
w = 254
h = 500

Define Img.l, max.l

Img = CreateImage(#PB_Any, w, h)
If Img
  StartDrawing(ImageOutput(Img))
    max = h - 1
    For i = 0 To max
      r =  (Red(c1) * i / max) + Red(c2) * (max - i) / max
      g =  (Green(c1) * i / max) + Green(c2) * (max - i) / max
      b =  (Blue(c1) * i / max) + Blue(c2) * (max - i) / max
      Line(0, i, w, 0, RGB(r, g, b))
    Next
  StopDrawing()
EndIf

SetClipboardImage(Img)

If OpenWindow(0, 0, 0, w, h, "Test", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
  If CreateGadgetList(WindowID(0))
    ImageGadget(0, 0, 0, w, h, ImageID(Img))
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
EndIf
Man muss nur daran denken, dass man zuerst Multipliziert und
anschließend Dividiert.
Antworten