Grundlage ist ein PureBasic-Listing von http://www.purearea.net/pb/CodeArchiv/Graphics/Image/GradientImage.pb
// --------------------------------- //
// Project: Farbverlauf
// Start: Monday, December 31, 2007
// IDE Version: 5.110
color1 = RGB(255, 0, 10)
color2 = RGB(60, 255, 255)
WHILE TRUE
Farbverlauf(100, 0, 500, 200, color1, color2, 0)
Farbverlauf(100, 220, 500, 450, color2, color1, 1)
SHOWSCREEN
WEND
// ------------------------------------------------------------- //
// --- FARBVERLAUF ---
// x1, y1, x2, y2 --- Koordinaten des Rechteckes für den
// Farbverlauf
// co1, col2 --- Farben für den Farbverlauf (von .. bis)
// direction --- 0 = horizontaler Verlauf
// <> 0 = vertikaler Verlauf
// ------------------------------------------------------------- //
FUNCTION Farbverlauf: x1, y1, x2, y2, col1, col2, direction
LOCAL i
LOCAL cr1, cg1, cb1
LOCAL cr2, cg2, cb2
LOCAL dr, dg, db
LOCAL red, green, blue
LOCAL count
SplitColor(col1, cr1, cg1, cb1)
SplitColor(col2, cr2, cg2, cb2)
IF direction = 0
count = x2 - x1 + 1
ELSE
count = y2 - y1 + 1
ENDIF
dr = (cr1 - cr2) / count
dg = (cg1 - cg2) / count
db = (cb1 - cb2) / count
FOR i = 0 TO count
red = cr1 - i * dr
green = cg1 - i * dg
blue = cb1 - i * db
IF direction = 0
DRAWLINE x1 + i, y1, x1 + i, y2, RGB(red, green, blue)
ELSE
DRAWLINE x1, y1 + i, x2, y1 + i, RGB(red, green, blue)
ENDIF
NEXT
ENDFUNCTION // FARBVERLAUF
// ------------------------------------------------------------- //
// --- SPLITCOLOR ---
// ------------------------------------------------------------- //
FUNCTION SplitColor: color, BYREF red, BYREF green, BYREF blue
red = bAND(color, 255)
green = bAND(color / 256, 255)
blue = bAND(color / POW(256, 2), 255)
ENDFUNCTION // SPLITCOLOR
Was haste den vor?
EDIT:
ohhh jetzt seh ich es ein Farbverlauf :D
werd ich mal antesten!
EDIT2:
Coole sache!
jau, naja vielleicht auch nicht wirklich sinnvoll, aber so sinnarme Spielereien machen mir zur Zeit Spaß ;)
mit Verwendung von ALPHAMODE kann man so auch die Farbverläufe auf angezeigte Grafiken übertragen
// --------------------------------- //
// Project: Farbverlauf
// Start: Monday, December 31, 2007
// IDE Version: 5.110
FOR i = 0 TO 19
DRAWRECT i * 5, i * 5, 200 - i * 10, 200 - i * 10, RGB(RND(255), RND(255), RND(255))
NEXT
GRABSPRITE 0, 0, 0, 200, 200
color1 = RGB(255, 0, 10)
color2 = RGB(60, 255, 255)
alpha = 0
addi = 0.01
alpha = 0
WHILE TRUE
INC alpha, addi
IF alpha > 1 OR alpha < 0 THEN addi = -addi
DRAWSPRITE 0, 300, 0
Farbverlauf(100, 0, 500, 200, color1, color2, 0, alpha)
Farbverlauf(100, 220, 500, 450, color2, color1, 1, alpha)
SHOWSCREEN
WEND
// ------------------------------------------------------------- //
// --- FARBVERLAUF ---
// x1, y1, x2, y2 --- Koordinaten des Rechteckes für den
// Farbverlauf
// co1, col2 --- Farben für den Farbverlauf (von .. bis)
// direction --- 0 = horizontaler Verlauf
// <> 0 = vertikaler Verlauf
// alpha --- Alphamode für Einfärbeffekte
// ------------------------------------------------------------- //
FUNCTION Farbverlauf: x1, y1, x2, y2, col1, col2, direction, alpha
LOCAL width, i
LOCAL cr1, cg1, cb1
LOCAL cr2, cg2, cb2
LOCAL dr, dg, db
LOCAL red, green, blue
LOCAL count
SplitColor(col1, cr1, cg1, cb1)
SplitColor(col2, cr2, cg2, cb2)
IF direction = 0
count = x2 - x1 + 1
ELSE
count = y2 - y1 + 1
ENDIF
dr = (cr1 - cr2) / count
dg = (cg1 - cg2) / count
db = (cb1 - cb2) / count
FOR i = 0 TO count
red = cr1 - i * dr
green = cg1 - i * dg
blue = cb1 - i * db
IF direction = 0
ALPHAMODE alpha
DRAWLINE x1 + i, y1, x1 + i, y2, RGB(red, green, blue)
ELSE
ALPHAMODE alpha
DRAWLINE x1, y1 + i, x2, y1 + i, RGB(red, green, blue)
ENDIF
NEXT
ENDFUNCTION // FARBVERLAUF
// ------------------------------------------------------------- //
// --- SPLITCOLOR ---
// ------------------------------------------------------------- //
FUNCTION SplitColor: color, BYREF red, BYREF green, BYREF blue
red = bAND(color, 255)
green = bAND(color / 256, 255)
blue = bAND(color / POW(256, 2), 255)
ENDFUNCTION // SPLITCOLOR
Unter Win32 macht man Farbverläufe besser mit POLYVECTOR.
ist die einfachste Lösung ja, aber nicht so schön verspielt ^^
stimmt, das mit POLYVECTOR ist mir nachher auch noch eingefallen, habs nur noch nicht hinbekommen ;)
Au ja, das ist traumhaft mit den Farbverläufen bei POLYVECTOR. Vor allem, weil sich wirklich jede Ecke anders einfärben lässt und dann alles perfekt ineinander fließt. Das muss intern ein toller Algorithmus sein!