close

Java 2D

Gå til navigasjon Gå til søk

Innen databehandling er Java 2D et API for å tegne todimensjonal grafikk ved hjelp av programmeringsspråket Java . Hver Java 2D-tegneoperasjon kan behandles som å fylle en form ved hjelp av en pensel og komponere resultatet på skjermen.

Grunnleggende konsepter

Disse objektene er en nødvendig del av enhver Java 2D-tegneoperasjon.

Former

En form i Java 2D er en uendelig tynn grense som definerer et indre og et ytre. Pikslene inne i formen påvirkes av tegneoperasjonen, de utenfor er ikke det .

Forsøk på å fylle et ekstremt tynt rett linjesegment vil føre til at ingen piksler påvirkes, og en form inneholder derfor ingen piksler. I stedet bør det brukes et tynt rektangel slik at formen inneholder noen piksler.

Børster

En pensel genererer fargene som skal brukes for hver piksel i fylloperasjonen. Den enkleste børsten er java.awt.Color , som gir samme farge for alle piksler. Mer kompliserte børster kan produsere gradienter, bilder eller en hvilken som helst kombinasjon av farger. Å fylle en sirkulær form med fargen gul resulterer i en solid gul sirkel, mens fylling av den samme sirkulære formen med en bildegenererende pensel gir en sirkulær beskjæring av bildet.

Forbindelser

Under enhver tegneoperasjon er det en kilde (pikslene som produseres av børsten) og en destinasjon (pikslene som allerede er på skjermen). Normalt overskriver kildepiksler ganske enkelt målpiksler, men Composite lar deg endre denne virkemåten.

Kompositten, gitt kilde- og målpiksler, produserer det endelige resultatet som til slutt vises på skjermen. Den vanligste kompositten er java.awt.AlphaComposite , som behandler pikslene som tegnes som delvis gjennomsiktige, slik at målpiklene viser gjennom til en viss grad.

Fylt

For å fylle en form, er det første trinnet å identifisere hvilke piksler som faller innenfor formen. Disse pikslene vil bli påvirket av fylloperasjonen. Piksler som er delvis innenfor og delvis utenfor formen kan bli påvirket i mindre grad hvis kantutjevnelse er slått på .

Børsten er nødvendig for å generere en farge fra hver av pikslene som skal males. I det vanlige tilfellet med en ensfarget fylling, vil hver piksel bli tildelt samme farge.

Kompositten tar pikslene generert av børsten og kombinerer dem med pikslene som allerede er på skjermen for å produsere det endelige resultatet.

Avanserte elementer

Disse objektene kan forstås i forhold til de enklere objektene skrevet før.

Transformasjon

Hver Java 2D-operasjon er gjenstand for transformasjon, slik at former kan oversettes, roteres og skaleres etter hvert som de tegnes. Den aktive transformasjonen er ofte identitetstransformasjonen , som ikke gjør noe.

Fylling ved hjelp av en transformasjon kan sees på som ganske enkelt å lage en ny transformert form og deretter fylle den formen.

Bevegelse

I tillegg til fylloperasjonen gir Java 2D en tegneoperasjon . Mens fill tegner det indre av en form, tegner draw omrisset. Konturen kan være så enkel som en tynn linje, eller så komplisert som en linje med avrundede kanter.

Objektet som er ansvarlig for å generere det ytre er bevegelse . Gitt en inngangsform, produserer bevegelse en ny form som representerer dens ytre. For eksempel kan et uendelig tynt linjesegment (uten indre) ikke flyttes til et rektangel med én piksel bredt.

En tegneoperasjon kan derfor beskrives som å lage et nytt, flyttet objekt og deretter fylle det objektet.

Teknisk sett er bevegelse bare nødvendig for å akseptere en inngangsform og produsere en ny form. Bevegelsesimplementeringen som følger med Java 2D implementerer konturreglene beskrevet ovenfor, men en tilpasset kontur kan produsere hvilken som helst ønsket form.

Optimaliseringer

Konseptuelt kan det å tegne en svart linje i Java 2D betraktes som å lage et linjesegment, transformere det i henhold til gjeldende transformasjon, flytte det for å lage et tynt rektangel, spørre om formen for å beregne pikslene som blir påvirket, generere pikslene som bruker java.awt.Color.BLACK , og deretter komponerer resultatene til skjermen.

Imidlertid vil å utføre hele denne sekvensen av trinn for hver tegneoperasjon være svært ineffektivt. Java 2D optimerer derfor vanlige tegneoperasjoner slik at mange av disse trinnene kan hoppes over. Hvis penselen for eksempel er en ensfarget farge, er det ikke nødvendig å beordre den til å generere en liste over farger som skal males. Dessuten, hvis den fullstendig ugjennomsiktige standardkompositten er i bruk, er det unødvendig å faktisk be den om å utføre komposittoperasjonen, og det vil resultere i bortkastet innsats.

Java 2D utfører minimalt med arbeid som er nødvendig for å få det til å se ut som om du gjør alle trinnene for hver operasjon, og beholder dermed stor fleksibilitet og høy ytelse.

Skjebne

For enkelhets skyld har eksemplene i denne artikkelen antatt at vinduet er målenheten. Destinasjonen kan imidlertid være hva som helst, for eksempel en skriver, minnebilde eller til og med et objekt som godtar Java 2D-grafikkkommandoer og oversetter dem til vektorgrafikk -bildefiler .*

Java2D/OpenGL interoperabilitet

Fra bygg 51 til den nye Java SE 6 -versjonen av programmeringsspråket Java , har Java2D og Opengl blitt interoperable, slik at det for eksempel kan tegnes animert 3D-grafikk i stedet for ikoner på en knapp (se JOGL ).

Eksterne lenker