Programowanie gradientów
Z Wikipedii:
Gradient - rozwiązanie stosowane w grafice komputerowej polegające na wypełnieniu określonego obszaru płynnym przejściem tonalnym pomiędzy co najmniej dwoma kolorami. Kształt tego wypełnienia może być rozmaity - począwszy od prostego równomiernego przejścia pomiędzy przeciwnymi bokami prostokąta, a skończywszy na przejściu wzdłuż linii krzywej, rozchodzeniu się promienistym itp.
W aplecie po lewej stronie mamy przykład gradientów. Przykład (1), (2), (3) pokazuje przejście dla kolorów podstawowych (R, G i B) od koloru czarnego np do czerwonego (dla 1).
Aby uzyskać taki efekt rozpatrzymy każdą składową koloru oddzielnie.
Np dla (1), będziemy zmieniali tylko sładową R w zakresie 0-255 na długości dl tzn wg wzoru:
for(int i=0;i<dl;i++) { g.setColor(new Color( i * 255 / dl,0 ,0)); g.drawLine(113+i,15,113+i,45); } |
g.setColor(new Color(0, i * 255 / dl, 0 ) ); |
Gradienty oznaczone (4), (5) i (6) to mieszanie składowych :
(4)=(1+2), (5)=(2+3) zaś (6)=(1+2+3).
Dla przykładu gradient (4) :
g.setColor(new Color(i*255/dl , i*255/dl , 0)); |
Zadanie: Uzyskać płynne przejście z koloru K1 do koloru K2, w dl krokach. |
np:
K1.r=K1>>16 ( o ile kolor podany jest liczbą) lub
K1.r=K1.getRed() to dla Javy, gdzie kolory są obiektami
Wielkość kroku dla każdej składowej obliczamy oddzielnie np (K2.r-K1.r) / dl
void rysuj(Graphics gg,Color K1,Color K2) {int K1_r,K1_g,K1_b,K2_r,K2_g,K2_b,r,g,b; K1_r=K1.getRed(); K2_r=K2.getRed(); K1_g=K1.getGreen(); K2_g=K2.getGreen(); K1_b=K1.getBlue(); K2_b=K2.getBlue(); for(int i=0;i<=dl;i++) { r=K1_r+i*(K2_r-K1_r)/dl; g=K1_g+i*(K2_g-K1_g)/dl; b=K1_b+i*(K2_b-K1_b)/dl; gg.setColor(new Color(r,g,b)); gg.drawLine(2+i,5,2+i,35); } } |
Inny ciekawy artykuł na ten temat Znajdziesz tu....