Sfumature sono esteticamente gradevoli le transizioni tra i colori . Java elabora automaticamente diversi tipi di sfumature tra i colori specificati dall'utente . È possibile impostare un gradiente come colore mentre si disegna in Java per creare forme , testo e altri oggetti con un effetto sfumato . Se le classi di gradiente di default di Java non sono abbastanza flessibili , è possibile elaborare le proprie pendenze in Java con cicli annidati . GradientPaint Classe
La classe GradientPaint fornisce il metodo più semplice per creare un semplice gradiente . Costruttore di GradientPaint accetta due punti , due colori e un valore booleano opzionale . Il gradiente risultante si sposterà dal primo colore al primo punto al secondo colore nel secondo punto . Se si passa il valore booleano vero , il gradiente ripeterà il gradiente in un senso o passato i punti iniziale e finale , la creazione di un modello ciclico . Un oggetto GradientPaint che cicli attraverso blu e bianco è istanziato come tale :
GradientPaint p = new GradientPaint ( new Point ( 0,0) , Color.blue , new Point ( 100,100 ) , Color.white , true) ;
LinearGradientPaint Classe
LinearGradientPaint è simile a GradientPaint , ma può creare un gradiente con più di due colori e permette agli utenti di definire la larghezza di ogni sezione colorata il gradiente dovrebbe essere. Costruttore di LinearGradientPaint accetta due punti , una serie di carri , la scelta dei colori e un valore opzionale per indicare in che modo il gradiente dovrebbe scorrere i colori . Ogni valore float corrisponde ad un colore e indica a che punto del gradiente che colore deve essere predominante . Ad esempio, se il gradiente deve essere blu un terzo del modo attraverso le sue 0.3f ciclo dovrebbe corrispondere con il colore blu. Un oggetto LinearGradientPaint che crea un gradiente attraverso blu , bianco e nero, senza ripetere utilizza il seguente costruttore :
float [ ] x = { 0.0f , 0.3f , 1.0f } ; colori [ ] c = { a colori . NERO , color.blue , Color.white } ; LinearGradientPaint lp = new LinearGradientPaint ( new Point ( 0,0) , nuovo punto ( 100,100 ) , x , c ) ;
RadialGradientPaint Classe
RadialGradientPaint crea gradazioni di circolari che si estendono fuori da un unico punto . Relativo costruttore prende un singolo punto che rappresenta il centro del cerchio , un valore float che rappresenta il raggio del cerchio , una serie di carri per rappresentare la velocità di cambiamento tra colori e una gamma di colori . Opzionalmente , si può accettare un punto di messa a fuoco che sposta il centro della sfumatura per creare sfumature ellittiche e un valore per determinare i cicli di gradiente attraverso i colori . Un'istanza di un oggetto RadialGradientPaint è simile alla creazione di un LinearPaintObject :
float [ ] x = { 0.0f , 0.3f , 1.0f } ; colori [ ] c = { Color.black , Color.blue , Color.white } ; LinearGradientPaint lp = new LinearGradientPaint ( new Point ( 50,50 ) , ( float ), 25 , x , c ) ;
Dipingere una sfumatura
È possibile creare più elaborato personalizzate gradienti in Java elaborando una sfumatura attraverso cicli annidati . Ad ogni passo del ciclo, creare un nuovo colore in base alla posizione nel ciclo. Nel ciclo più interno , disegnare un quadrato in una posizione definita dalla tua posizione in loop nel colore corrente . Il codice nell'esempio che segue crea un rettangolo sfumatura che inizia nel punto ( 0,0) e si trova a 400 pixel di larghezza e 500 pixel di altezza. Il galleggiante valori r1 , g1 e b1 definiscono i valori R, G e B del colore iniziale . Il r2 valori , g2 e b2 definiscono i valori R, G e B per il secondo colore . Il primo ciclo venga dagli iniziali coordinata x alla larghezza del rettangolo . Il ciclo interno viene eseguito dalla coordinata y iniziale per l' altezza del rettangolo . Così, il ciclo interno , il punto (i, j ) corrisponde sempre ad un punto diverso nel rettangolo gradiente . Ogni volta che il programma cicli attraverso il ciclo annidato , modifica il valori R e B come frazione della corrente di coordinate x , quanto più il punto è al valore iniziale x , più il valori R e B saranno ai valori iniziali . Il programma modifica il valore di b rispetto alla coordinata y corrente , creando lo stesso effetto su un asse differente . Si crea quindi un nuovo colore dalla modificato R, G e valori di b , e disegna un rettangolo di esattamente un pixel in larghezza e altezza in corrispondenza della coordinata corrente nel nuovo colore
int x = 0; . Int y = 0; int width = 400 ; int altezza = 500; float r1 = 0; float g1 = 0; float b1 = 1; float r2 = 1; float g2 = 1; float b2 = 0; float rS = Math.abs ( r2 - r1) ; float GF = Math.abs ( g2 - g1) ; float bs = Math.abs (B2 - B1) ; for (int i = x , i < larghezza ; i + + ) {for ( int j = y , j < altezza; j + + ) {float r, g , b; if ( r1 < r2 ) { r = ( ( (RS) /larghezza) * i) + r1 ; } else { r = ( r1 - ( (RS ) /larghezza) * i); } if ( g1 < g2 ) { g = ( ( (GS ) /larghezza) * i) + G1 ; } else { g = ( g1 - ( (GS ) /larghezza) * i) ; } if ( b1 < r2 ) { b = ( ( (BS) /larghezza) * i) + b1 ; } else { b = ( b1 - ( (BS) /larghezza) * i); } a colori c = new Color ( r, g , b , ( float ), 0,5) ; g2d.setColor ( c); g2d.fillRect ( i, j , 1 , 1) ; } }