Кіріспе

Java 2D графикалық API

Java 2D – Java бағдарламалау тілін пайдаланып екі өлшемді графиканы салуға арналған API. Java 2D-нің кез келген суреттеу операциясы бояуды қолданып пішінге толтыру және нәтижені экранға шығару ретінде қарастырылуы мүмкін.

Ұйым

Java 2D API және оның құжаттамасы JDK 6 құрамында жүктеуге қолжетімді. Java 2D API сыныптары JDK 6-да келесі пакеттерге жинақталған:
Java Abstract Window Toolkit-тің негізгі пакеті. Сызықтар, эллипстер және төртбұрыштар сияқты екі өлшемді геометриялық пішіндердің Java стандартты кітапханасы. Java-да глифтерді өңдеуге арналған кітапхана. Түстің әртүрлі тәсілдермен бейнеленуімен айналысатын кітапхана. Графикалық кескіндерді өңдеу кітапханасы. Қағазға шығару құралдарының кітапханасы.

Негізгі түсініктер

Бұл нысандар Java 2D графикалық операцияларының қажетті бөлігі болып табылады.

Пішіндері

Java 2D-дегі пішін – ішкі және сыртқы бөлігін анықтайтын шекара. Пішіннің ішіндегі пикселдерге сурет салу операциясы әсер етеді, ал сыртындағыларына әсер етпейді. Тікелей сызық сегментін толтыруға тырысқанда ешқандай пикселге өзгеріс енбейді, себебі мұндай пішінде өзі пикселдер болмайды. Оның орнына, пішінде бірнеше пиксел болатын жұқа тіктөртбұрыш пайдалану қажет.

Бояулар

Бояу толтыру операциясының әр пикселі үшін қолданылатын түстерді жасайды. Ең қарапайым бояу — , ол барлық пикселдер үшін бірдей түс тудырады. Күрделі бояулар градиенттерді, кескіндерді немесе түстердің кез келген комбинациясын жасауы мүмкін. Сары түспен толтырылған дөңгелек пішін – бір түсті сары дөңгелек, ал кескінді жасайтын бояуды пайдаланып сол дөңгелек пішін толтырылса – кескінден дөңгелек бөлік шығады.

Композиттер

Кез келген сурет салу операциясы кезінде, көз (бояумен жасалатын пиксельдер) және мақсат (экрандағы бар пиксельдер) болады. Әдетте, көз пиксельдері мақсат пиксельдерін жай ғана жабады, бірақ композиция осы әрекетті өзгертуге мүмкіндік береді. Композиция көз және мақсат пиксельдерін пайдаланып, экранда көрінетін соңғы нәтижені шығарады. Ең көп қолданылатын композиция – , ол салынатын пиксельдерді жартылай мөлдір ретінде қарастырады, сондықтан мақсат пиксельдері белгілі бір деңгейде көрініп тұрады.

Толтыру

Пішінді толтыру үшін алғашқы қадам – пішіннің ішінде қалған пиксельдерді анықтау. Осы пиксельдерге толтыру операциясы әсер етеді. Егер пиксельдердің бір бөлігі пішіннің ішінде, екінші бөлігі сыртында болса, антиалиазинг қосылған жағдайда, оларға әсері азырақ болуы мүмкін. Содан кейін бояу әрбір боялатын пиксел үшін түс жасауды сұрайды. Бір түсті толтырудың ең көп кездесетін жағдайында, әр пиксел бірдей түске боялады. Композит бояу жасаған пиксельдерді алып, экрандағы бар пиксельдермен біріктіріп, түпкі нәтижені шығарады.

Жоғары деңгейдегі нысандар

Бұл нысандарды жоғарыда сипатталған қарапайым нысандар арқылы өз қызметтерін атқаратындай деп қарастыруға болады.

Түрлендіру

Әрбір Java 2D операциясы трансформацияға түседі, осылайша пішіндер сызылғанда аударылуы, бұрылуы, қиылысуы және масштабталуы мүмкін. Активті трансформация көбінесе ешқандай өзгеріс жасамаушы сәйкестік трансформациясы болып табылады. Трансформация қолданып толтыруды жаңа, өзгертілген пішін жасап, содан кейін осы пішінге бояу жағу деп қарастыруға болады.

Инсульт

Java 2D толтыру операциясынан өзге, сызу операциясын да ұсынады. Толтыру пішіннің ішкі кеңістігін сызатын болса, сызу оның шекараларын жасайды. Шекара қарапайым, жұқа сызық түрінде де, немесе әр сызығы дөңгелек жиектері бар, үзіліс-үзіліс сызық түрінде де болуы мүмкін. Шекараны жасауға жауапты нысан – соққы (stroke). Егер пішін берілсе, соққы оның шекарасын көрсететін жаңа пішін жасайды. Мысалы, ішкі кеңістігі жоқ, шексіз жұқа сызық сегменті бір пиксель ені бар тіктөртбұрышқа айналуы мүмкін. Сондықтан, сызу операциясын жаңа, соққымен жасалған нысанды құру және одан кейін осы нысанды толтыру деп сипаттауға болады. Техникалық тұрғыдан алғанда, соққы кіріс пішінін қабылдап, жаңа пішін шығаруы керек. Java 2D жүйесімен ұсынылатын соққы іске асыру жоғарыда сипатталған шекара ережелерін орындайды, бірақ қолмен жазылған соққы кез келген пішін жасауға мүмкіндік береді.

Оңтайландырулар

Концептуалды тұрғыдан алғанда, Java 2D-де қара түстес түзу сызықты салуды сызық сегментін құру, оны ағымдағы түрлендіруге сәйкес өзгерту, оны жұқа тіктөртбұрыш жасау үшін сылау, осы пішінге сұраныс жіберіп әсер ететін пиксельдерді есептеу, пиксельдерді жасау және содан кейін нәтижелерді экранға қосу деп қарастыруға болады. Дегенмен, әрбір сызу операциясы үшін осы қадамдардың толық тізбегін орындау өте тиімсіз болар еді. Сондықтан Java 2D жиі қолданылатын сызу операцияларын оңтайландырады, осылайша көптеген қадамдарды өткізіп жіберуге мүмкіндік береді. Мысалы, егер бояу қарапайым бір түсті болса, боялуға тиіс түстер тізімін жасау үшін оған тікелей бұйрық берудің қажеті жоқ. Сол сияқты, егер әдепкі толық мөлдір емес қосылымы қолданылса, одан қосылыс операциясын орындауын сұраудың қажеті жоқ, бұл күш-жігерді зейінсіз жұмсау болар еді. Java 2D әрбір операция үшін осы қадамдардың барлығы орындалып жатқандай көрінуін қамтамасыз ету үшін қажетті ең аз жұмысты атқарады, соның арқасында үлкен икемділік пен жоғары өнімділікті сақтайды.

Жеткізу орны

Қарапайымдылық үшін, осы мақалада келтірілген мәтіндік мысалдар экранды түпкілікті құрылғы деп қарастырды. Бірақ, түпкілікті құрылғы кез келген нәрсе болуы мүмкін, мысалы, принтер, жад суреті, тіпті Java 2D графикалық командаларын қабылдап, оларды векторлық графикалық кескіндерге айналдыратын объект.

Java2D / OpenGL өзара іс-қимыл

Java SE 6 нұсқасынан бастап Java2D және OpenGL өзара жұмыс істей алады, мысалы, Батырмаға иконалардың орнына анимациялық 3D графиканы салуға мүмкіндік береді (JOGL-ға қараңыз).