Die Bildverarbeitung ist ein sehr komplexes Thema in der Java 2D API. Es stehen hier viele Möglichkeiten zur
Verfügung, um Bilder - z.B. durch mathematische Funktionen (Filter, Interface java.awt.image.BufferedImageOp
)
- zu verarbeiten. Auf die internen
Daten eines Bildes kann man bei Benutzung der Klasse java.awt.image.BufferedImage
lesend
und schreibend zugreifen. Aus Komplexitätsgründen gehe ich hier lediglich auf das Laden und Darstellen von Bildern ein.
Das Paket java.awt.image
enthält Klassen für die Bildverarbeitung.
Bilder im oft verwendeten JPEG-Format können mit der Klasse com.sun.image.codec.jpeg.JPEGImageDecoder
aus einem Eingabestrom geladen werden. Man erhält ein BufferedImage
-Objekt, welches in der
Graphics2D
-Zeichenfläche dargestellt werden kann.
Interessant ist hierbei, daß auch Bilder gemäß der gesetzten Eigenschaften wie z.B. der aktuellen affinen Transformation oder
der aktuellen Kompositionsregel, gezeichnet werden.
Die Darstellung eines Bildes erfolgt mit einer der drawImage
-Methoden aus Graphics2D
, wie das folgende
Beispiel (Zugriff auf die Quelle) zeigt:
public void paint(Graphics g) {
//Upcast --> mehr Funktionen in Graphics2D
Graphics2D g2d=(Graphics2D)g;
//Antialiasing
g2d.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON );
//Bild laden
BufferedImage img = loadTheImage();
//Bild malen
g2d.drawImage( img, null, 0,0 );
//Affine Transformation
AffineTransform atx = new AffineTransform();
atx.scale(0.5,0.5);
atx.translate(500,0);
atx.rotate(Math.PI/8f);
g2d.setTransform( atx );
//Transparenz
g2d.setComposite( AlphaComposite.getInstance( AlphaComposite.SRC_OVER, 0.7f ) );
//Bild erneut malen
g2d.drawImage( img, null, 0,0 );
}
Das Ergebnis sieht so aus: