Na czym polega robienie gradientu? W zmiennych przechowamy sobie składowe wartość r, g i b koloru pierwszego oraz w r2, g2 i b2 koloru drugiego. Następnie obliczamy różnicę pomiędzmy tymi składowymi. Następnie dzielimy wynik przez długośc (lub wysokość), aby wiedzieć, o ile musimy zwiększać poszególne składowe w każdym obiegu pętli. Następnie, w pętli zmieniamy składowe, aż w końcu dochodzimy do koloru końcowego.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
procedure TForm1.Button1Click(Sender: TObject); var i , j : Integer ; x , y : Integer ; r , g , b : Real ; r2 , g2 , b2 : Real ; DodR , DodG , DodB : Real ; dr, dg , db : Integer ; dlugosc : Integer ; begin KolorPocz := PanelKolor1.Color ; KolorKonc := PanelKolor2.Color ; // składowe koloru początkowego r := GetRValue(KolorPocz) ; g := GetGValue(KolorPocz) ; b := GetBValue(KolorPocz) ; // składowe koloru końcowego r2 := GetRValue(KolorKonc) ; g2 := GetGValue(KolorKonc) ; b2 := GetBValue(KolorKonc) ; // różnice w składowych dr := Round(r2) - Round(r) ; dg := Round(g2) - Round(g) ; db := Round(b2) - Round(b) ; if Poziomo then begin dlugosc := PaintBox1.Width ; x := PaintBox1.Width - 1 ; y := PaintBox1.Height - 1 ; end else begin dlugosc := PaintBox1.Height ; y := PaintBox1.Width - 1 ; x := PaintBox1.Height - 1 ; end ; // obliczamy, o ile będziemy zmieniać poszczególne składowe if dr = 0 then DodR := 0 else DodR := dr / dlugosc ; if dg = 0 then DodG := 0 else DodG := dg / dlugosc ; if db = 0 then DodB := 0 else DodB := db / dlugosc ; for i := 0 to x do begin for j := 0 to y do begin if Poziomo then PaintBox1.Canvas.Pixels[i , j] := RGB(Round(r) , Round(g) , Round(b)) else PaintBox1.Canvas.Pixels[j , i] := RGB(Round(r) , Round(g) , Round(b)) ; end ; // zmieniamy składowe dopóki nie są identyczne z końcowymi if ((DodR > 0) and (r < r2)) or ((DodR < 0) and (r > r2)) then r := r + DodR ; if ((DodG > 0) and (g < g2)) or ((DodG < 0) and (g > g2)) then g := g + DodG ; if ((DodB > 0) and (b < b2)) or ((DodB < 0) and (b > b2)) then b := b + DodB ; end ; end; |
Autor: Iskar