Seite 1 von 1

Farbverlauf von Farbe A zu Farbe B

Verfasst: 26.03.2008 00:23
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]

Re: Farbverlauf von Farbe A zu Farbe B

Verfasst: 26.03.2008 00:35
von Kiffi
vielleicht ist dieser Code in der PureArea was für Dich.

Grüße ... Kiffi

Verfasst: 26.03.2008 00:47
von Delle
Tanke, dessen Anpassung ging schneller als Selfcoding :)

Verfasst: 26.03.2008 11:38
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.

Verfasst: 26.03.2008 12:41
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()

Verfasst: 26.03.2008 12:56
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.