Java Processing Color Gradient

Gradienter er estetisk tiltalende overganger mellom farger. Java behandler automatisk flere typer gradienter mellom brukeren spesifiserte farger. Du kan angi en gradient som en farge mens du tegner i Java for å lage figurer, tekst og andre objekter med en gradient effekt. Hvis Javas standardgraderings klasser er ikke fleksibel nok, kan du behandle dine egne gradienter i Java med nestede løkker.

GradientPaint Class

Den GradientPaint klasse gir den enkleste metoden for å skape en enkel gradient. GradientPaint konstruktør godtar to poeng, to farger og en valgfri boolsk verdi. Den resulterende gradient vil skifte fra den første fargen på det første punktet til den andre farge ved det andre punktet. Hvis du passerer boolsk verdi sant, vil gradienten gjenta gradient i begge retninger forbi start- og sluttpunkt, og skaper en syklisk mønster. En GradientPaint objekt som gjennomgår blått og hvitt er instansiert som sådan:

GradientPaint p = ny GradientPaint (nytt punkt (0,0), Color.BLUE, ny Point (100 100), Color.WHITE, true);

LinearGradientPaint Class

LinearGradientPaint ligner GradientPaint, men det kan skape en gradient gjennom mer enn to farger, og det gjør det mulig for brukere å definere hvor bred hver farget delen av graderingen skal være. LinearGradientPaint konstruktør godtar to poeng, en rekke flyter, en rekke farger og en valgfri verdi for å angi hvor gradienten skal sykle gjennom farger. Hver float verdien tilsvarer en farge og viser på hvilket punkt i gradient at fargen skal være dominerende. For eksempel, hvis det skulle være gradient blå en tredjedel av veien gjennom sin syklus 0.3f skal korrespondere med fargen blå. En LinearGradientPaint objekt som skaper en gradient gjennom blå, svart og hvitt uten å gjenta bruker følgende konstruktør:

flyte [] x = {0.0f, 0.3f, 1.0f};
Farge [] c = {Color.BLACK, Color.BLUE, Color.WHITE};
LinearGradientPaint lp = ny LinearGradientPaint (nytt punkt (0,0), ny Point (100 100), x, c);

RadialGradientPaint Class

RadialGradientPaint skaper sirkulære gradienter som strekker seg ut fra et enkelt punkt. Dens konstruktøren tar et enkelt punkt som representerer sentrum av sirkelen, en flottør verdi som representerer radien til sirkelen, en rekke av flottører for å representere endringstakten mellom farger og en rekke farger. Eventuelt kan det godta et fokuspunkt som forskyver midten av gradient å skape elliptiske gradienter og en verdi for å bestemme hvordan gradient sykluser gjennom farger. Forekomster en RadialGradientPaint Objektet ligner skape en LinearPaintObject:

flyte [] x = {0.0f, 0.3f, 1.0f};
Farge [] c = {Color.BLACK, Color.BLUE, Color.WHITE};
LinearGradientPaint lp = ny LinearGradientPaint (ny Point (50,50), (float) 25, x, c);

Maleri en Gradient

Du kan opprette mer forseggjort tilpasset gradienter i Java ved å behandle din egen gradient gjennom nestet sløyfer. På hvert trinn i loop, opprette en ny farge basert på din posisjon i loop. I den innerste løkken, tegne en firkant i en posisjon definert av din posisjon i loopen i gjeldende farge. Koden i eksemplet under oppretter en gradient rektangel som begynner på det punktet (0,0) og er 400 piksler bred og 500 piksler høy. Flottøren verdier r1, g1 og b1 definere r, g og b verdiene av den første farge. Verdiene r2, g2 og b2 definerer R, G og B-verdier for de andre fargene. Den første sløyfen går fra de første X-koordinaten til bredden av rektangelet. Den indre sløyfe løper fra den første y-koordinaten til høyden på rektangelet. Derfor, i den indre løkken, poenget (i, j) alltid svarer til et annet punkt i gradient rektangel. Hver gang programsykluser gjennom nestet sløyfe, endrer det de R og B-verdier som en brøkdel av dagens x koordinere; jo nærmere punktet er til den opprinnelige x-verdien er, desto nærmere r og b-verdier vil være til deres startverdier. Programmet modifiserer b verdi i forhold til den aktuelle y-koordinaten, skaper den samme virkning på en annen akse. Det skaper deretter en ny farge fra de modifiserte R, G og B-verdier, og tegner et rektangel av nøyaktig én piksel i bredde og høyde på dagens koordinere i den nye fargen.

int x = 0; int y = 0;
int width = 400; int height = 500;
float r1 = 0; float g1 = 0; float b1 = 1;
flottør r2 = 1; float g2 = 1; float b2 = 0;
flyte rS = Math.abs (r2-r1);
flyte GS = Math.abs (g2-g1);
flyte bS = Math.abs (b2-b1);
for (int i = x; i <bredde; i ++) {

for(int j = y; j &lt; height;j++){
float r,g,b;
if(r1&lt;r2){ r = (((rS)/width)*i)+r1;}
else{r = (r1-((rS)/width)*i);}
if(g1&lt;g2){g = (((gS)/width)*i)+g1;}
else{g = (g1-((gS)/width)*i);}
if(b1&lt;r2){b = (((bS)/width)*i)+b1;}
else{b = (b1-((bS)/width)*i);}
Color c = new Color(r,g,b,(float)0.5);
g2d.setColor(c);
g2d.fillRect(i, j, 1, 1);
}

}