Wie kann man auf ein bestehendes Bild zeichnen?
In einem JLabel soll das nebenstehende Bild dargestellt werden. Ausgangspunkt ist eine Fotografie, auf die ein schwarzer Balken und der Text "zensiert" gezeichnet werden sollen.
Um das Bild zu laden, erstellen wir zunächst ein File
-Objekt,
dem der Pfad zur Bilddatei als String übergeben
wird. Die Klasse javax.imageio.ImageIO
stellt Methoden zum Lesen und Schreiben, sowie zum
einfachen encodieren und decodieren von Bilddateien
bereit. Die Methode read()
liest u.a. aus
einem übergebenen File
-Objekt. Sie
muss zum Abfangen einer IOException
in
einen try-catch-Block eingebettet werden.
Die abstrakte Klasse java.awt.Graphics
stellt eine Unmenge an Möglichkeiten zur
Verfügung um grafische Operationen in Java
durchzuführen.
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.border.LineBorder;
public class AufBildZeichnenClass {
String imgPath = "img/h1.jpg";
BufferedImage image;
public AufBildZeichnenClass() {
File file = new File(imgPath);
image = loadImg(file);
if (image == null) {
return;
}
zensiere();
init();
}
private void init() {
JFrame frame = new JFrame("Zensiert");
ImageIcon icon = new ImageIcon(image);
JLabel label = new JLabel(icon);
label.setBorder(new LineBorder(Color.WHITE));
frame.add(label);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private BufferedImage loadImg(File file) {
BufferedImage image = null;
try {
image = ImageIO.read(file);
} catch (IOException ex) {
ex.printStackTrace();
}
return image;
}
public void zensiere() {
Graphics g = image.getGraphics();
g.setColor(Color.BLACK);
g.fillRect(0, 190, 450, 50);
g.setFont(new Font("Sans", Font.PLAIN, 40));
g.setColor(Color.WHITE);
g.drawString("zensiert", 40, 230);
}
public static void main(String args[]) {
SwingUtilities.invokeLater(() -> new AufBildZeichnenClass());
}
}
Die Methode Image.getGraphics()
gibt eine
entsprechende Referenz zurück, die hier zur
Bearbeitung verwendet wird:
Zur Darstellung eines Bildes auf einem JLabel
eignet sich die Klasse ImageIcon
in
besonderer Weise. Ein Objekt kann neben der
Übergabe einer URL oder eines Pfad-Strings auch
durch die Übergabe eines Image-Objektes
gebildet werden.
Jetzt kann das JLabel
an den Hauptcontainer übergeben werden.
1) Die Parameter bestimmen hier der
Reihenfolge nach: x-Wert des oberen linken Punktes,
y-Wert des oberen linken Punktes, Breite, Höhe
2) Die Parameter bestimmen hier der
Reihenfolge nach: Schriftfamilie als String, Schrifttyp,
Schriftgröße
3) Die
Parameter bestimmen hier der Reihenfolge nach: zu
schreibender String, x-Wert des oberen linken Punktes,
y-Wert des oberen linken Punktes
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.