Spis treści

Programowanie grafiki 2D - renderowane grafiki

Wprowadzenie

Do programowania grafiki 2D służy biblioteka Java2D, która stanowi część platformy Java SE. W zestawie znajdziesz przykłady oraz ćwiczenia dotyczące renderowania obiektów graficznych oraz użycia kolorów, gradientów, tekstur, przezroczystości i wykorzystania fontów dostępnych w lokalnym środowisku graficznym.

Przykład I

Poniżej znajdziesz definicję klasy Plansza rozszerzającej klasę biblioteczną javax.swing.JPanel, zawierającą pole figura typu java.awt.Shape, oraz odpowiednią klasę Program służącą do przetestowania przykładu w oknie interfejsu graficznego (javax.swing.JFrame).

Program.java
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
 
class Plansza extends JPanel
{
   Shape figura;
 
   Plansza(Shape figura)            
   {                                
      this.figura=figura;           
   }                                
 
   public void paintComponent(Graphics g) 
   {                                      
      super.paintComponent(g);            
      Graphics2D g2d=(Graphics2D)g;       
 
      g2d.draw(figura);                   
   }                                      
}
 
public class Program
{
   public static void main(String[] args)                
   {                                                     
      Shape obj1;                                        
      obj1=new Rectangle2D.Float(100,100,140,100);       
 
      Plansza p;                                         
      p=new Plansza(obj1);                               
 
      JFrame jf=new JFrame();                            
      jf.add(p);                                         
 
      jf.setTitle("Test grafiki");                       
      jf.setSize(400,400);                               
      jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      jf.setVisible(true);                               
   }                                                     
}

ćw. 8.1
Zidentyfikuj składowe klas, przeanalizuj cel ich użycia oraz składnię, a także przeanalizuj dokumentację dotyczącą każdej spośród wykorzystanych klas bibliotecznych. Zestaw odpowiednią jednostkę kompilacji i przetestuj przykład.

ćw. 8.2
Utwórz planszę z prostokątem reprezentowanym przez obiekt Rectangle2D.Float i elipsą reprezentowaną przez obiekt Ellipse2D.Float. Posługując się dokumentacją znajdź odpowiednią metodnie metody pozwalające sprawdzić czy te figury się przecinają. Do testu użyj instrukcji „if” oraz metody void drawString(String str, float x, float y) klasy java.awt.Graphics2D (być może będziesz musiał zastosować odpowiednie rzutowanie).

ćw. 8.3
Utwórz planszę z prostokątem reprezentowanym przez obiekt Rectangle2D.Float i elipsą reprezentowaną przez obiekt Ellipse2D.Float. Posługując się dokumentacją znajdź odpowiednią metodnie metody pozwalające sprawdzić czy te figury się zawierają.

ćw. 8.4
Utwórz planszę z prostokątem reprezentowanym przez obiekt Ellipse2D.Float i punktem reprezentowanym przez obiekt Point2D.Float. Posługując się dokumentacją znajdź odpowiednią metodnie metody pozwalające sprawdzić czy ten punkt leży wewnątrz prostokąta.

ćw. 8.5
Posługując się dokumentacją klasy java.awt.Graphics2D i jej metod napisz program który wyrenderuje zielony prostokąt z wypełnieniem.

java_08_02_fill.jpg

ćw. 8.6
Posługując się dokumentacją klasy java.awt.Graphics2D i jej metod napisz program, który wyrenderuje elipsę pokrytą gradientem według wzoru na rysunku poniżej.

java_08_03_grad.jpg

ćw. 8.7
Posługując się dokumentacją klasy java.awt.Graphics2D i jej metod napisz program, który wyrenderuje elipsę pokrytą gradientem radialnym.

ćw. 8.8
Posługując się dokumentacją klasy java.awt.Graphics2D i jej metod napisz program, który wyrenderuje prostokąt i pokryje go teksturą pobraną z dowolnego pliku jpg.

java_08_04_text.jpg

Obiekt BufferedImage może być utworzony w następujący sposób

import java.io.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
 
// (...)
 
String plik="plik.jpg";
BufferedImage img;
try
{
	File f=new File(plik);
	img=ImageIO.read(f);
}
catch(IOException e)
{
	System.err.println("Problem z plikiem");
}

ćw. 8.9
Posługując się dokumentacją klasy java.awt.Graphics2D i jej metod napisz program, który wyrenderuje dwie przenikające się elipsy, przedstawione na rysunku poniżej.

java_08_05_alpha.jpg

Obiekt AlphaComposite może być utworzony na przykład w następujący sposób

AlphaComposite a = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.5f);

ćw. 8.10
Posługując się dokumentacją klasy java.awt.Graphics2D i jej metod napisz program, który wyrenderuje fragment łuku (Arc2D) przedstawiony na rysunku poniżej.

java_08_06_arc.jpg

ćw. 8.11
Posługując się dokumentacją klasy java.awt.Graphics2D i jej metod napisz program, który wyrenderuje linie przedstawione na rysunku poniżej. Zwróć uwagę na zakończenia linii.

java_08_07_lines.jpg

ćw. 8.12
Posługując się dokumentacją klasy java.awt.Graphics2D i jej metod napisz program, który wyrenderuje figury przedstawione na rysunku (Polygon) i za pomocą odpowiednich metod kontekstu graficznego zademonstruje operacje translacji, rotacji i skalowania. Zwróć uwagę na sposób łączenia linii.

java_08_08_poly.jpg

ćw. 8.13
Rozwiń kalkulator z poprzedniego zestawu poprzez dodanie funkcjonalności kalkulatora graficznego - Twój kalkulator powinien posiadać funkcjonalność zwykłego kalkulatora oraz powinien rysować wykresy funkcji (w tym celu będziesz musiał także rozwiązać problem parsowania wyrażeń matematycznych, możesz w tym celu ograniczyć się do pewnego podzbioru wyrażeń, na przykład wielomianów lub funkcji wymiernych).



Z. Dendzik, 2024