Verlopen worden esthetisch overgangen tussen kleuren . Java automatisch verwerkt verschillende soorten hellingen tussen de gebruiker opgegeven kleuren . U kunt een verloop in te stellen als een kleur tijdens het tekenen in Java te vormen, tekst en andere objecten te maken met een gradiënt effect . Als Java 's standaard gradiënt klassen zijn niet flexibel genoeg is , kunt u uw eigen gradiënten verwerken in Java met geneste lussen . GradientPaint Class De GradientPaint klasse biedt de meest eenvoudige methode van het creëren van een eenvoudige verloop . GradientPaint 's constructor accepteert twee punten , twee kleuren en een optionele Booleaanse waarde . De resulterende helling zal verschuiven van de eerste kleur op het eerste punt om de tweede kleur op het tweede punt . Als je de boolean waarde passeren waar is, zal het verloop van de gradiënt in beide richtingen herhaald voorbij het begin-en eindpunt , het creëren van een cyclisch patroon . Een GradientPaint object dat doorloopt blauw en wit wordt geïnstantieerd als zodanig : GradientPaint p = new GradientPaint (nieuw punt ( 0,0) , Color.blue , new Point ( 100,100 ) , Color.white , true) ; LinearGradientPaint Class LinearGradientPaint is vergelijkbaar met GradientPaint , maar het kan een gradiënt creëren door middel van meer dan twee kleuren en het stelt gebruikers in staat om te bepalen hoe groot elke gekleurde sectie van de gradiënt te zijn. LinearGradientPaint 's constructor accepteert twee punten , een array van praalwagens , een scala van kleuren en een optionele waarde aan te geven hoe het verloop moet doorlopen kleuren . Elke float waarde correspondeert met een kleur aangeeft op welk moment in het verloop dat kleur primeert . Als bijvoorbeeld de gradiënt blauwe eenderde van de weg moet worden door zijn cyclus 0.3f correspondeert met de kleur blauw . Een LinearGradientPaint object dat een verloop door blauw , zwart en wit creëert zonder herhaling gebruikt de volgende constructor : float [ ] x = { 0.0f , 0.3f , 1.0f } ; Kleur [ ] c = { Color . BLACK , color.blue , Color.white } ; LinearGradientPaint lp = new LinearGradientPaint (nieuw punt ( 0,0) , nieuwe Point ( 100,100 ) , x , c ) ; RadialGradientPaint Class RadialGradientPaint creëert cirkelvormige gradiënten breiden uit vanuit een enkel punt . De constructor neemt een enkel punt vertegenwoordigt het midden van de cirkel , een float waarde die de straal van de cirkel , een array van praalwagens voor de mate van verandering tussen de kleuren en een reeks van kleuren vertegenwoordigen . Eventueel kan een focuspunt dat het midden van de gradiënt verschuift naar elliptische verlopen en een waarde voor het kleurverloop cyclus te bepalen door kleuren verbintenissen vereisen . Instantiëren een RadialGradientPaint object is vergelijkbaar met het maken van een LinearPaintObject : float [ ] x = { 0.0f , 0.3f , 1.0f } ; Kleur [ ] c = { Color.Black , Color.blue , Color.white } ; LinearGradientPaint lp = new LinearGradientPaint (nieuw punt ( 50,50 ) , ( float ) 25 , x , c ) ; Schilderen van een Gradient U kunt creëren meer uitgebreide aangepaste gradiënten in Java door het verwerken van uw eigen verloop via geneste lussen . Bij elke stap in de lus , maak een nieuwe kleur op basis van je positie in de lus . In de binnenste lus , trek een vierkant op een positie bepaald door uw positie in de lus in de huidige kleur . De code in het onderstaande voorbeeld wordt een gradiënt rechthoek die begint bij het punt ( 0,0 ) en 400 pixels breed en 500 pixels hoog . De vlotter waarden r1 , g1 en b1 hier de r, g en b waarden van de eerste kleur . De waarden r2 , g2 en b2 hier de r, g en b waarden voor de tweede kleur . De eerste lus loopt van de eerste coördinaat x de breedte van de rechthoek . De binnenste lus loopt van de eerste y-coördinaat op de hoogte van de rechthoek . Zo is in de binnenste lus , het punt ( i , j ) komt altijd overeen met een ander punt in het verloop rechthoek . Elke keer dat het programma doorloopt de geneste lus , het de r en b waarden als een fractie van de huidige x-coördinaat wijzigt , hoe dichter het punt is om de eerste x-waarde , hoe dichter de r en b waarden worden naar hun oorspronkelijke waarden . Het programma wijzigt de b waarde voor de huidige y-coördinaat , waardoor hetzelfde effect op een andere as. Vervolgens wordt er een andere kleur te gemodificeerde r , g en b waarden en stelt een rechthoek precies een pixel in de breedte en hoogte van de actuele coördinaat in de nieuwe kleur int x = 0 ; . Int y = 0 ; int width = 400 ; int height = 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 gS = Math.abs ( g2 - g1 ) ; float bS = Math.abs ( b2 - b1 ) ; for ( int i = x ; i < breedte ; i + + ) { for ( int j = y ; j < height ; j + + ) { float r , g, b if ( r1 < r2 ) { r = ( ( ( rS ) /breedte ) * i ) + r1 ; } else { r = ( r1 - ( ( rS ) /breedte ) * i ) ; } if ( g1 < g2 ) { g = ( ( (GS) /breedte ) * i ) + g1 ; } else { g = ( g1 - ( (GS) /breedte ) * i ) ;} if ( b1 < r2 ) { b = ( ( (BS) /breedte ) * i ) + b1 ; } else { b = ( b1 - ( (BS) /breedte ) * i ) ; } kleur c = new Color ( r, g , b , ( float ) 0.5 ) ; g2d.setColor ( c ) ; g2d.fillRect ( i , j , 1 , 1 ) ; } }
|