Welchen Platz braucht ein Text?

Status
Nicht offen für weitere Antworten.

Fats

Bekanntes Mitglied
Mojn Zusammen!

Ich möchte eine Grafik dynamisch erstellen. Diese soll einfach nur Text enthalten (zB. "Hallo Echo"). Woher weiß ich, wie groß meine Grafik sein muß, wenn ich den text vorher nicht kenne, aber keine explizite Größenangabe vorgeben möchte? Kann man sich das irgendwoher ausrechnen?

Mein Grafik wird prinzipiell folgendermaßen erstellt:

Code:
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();             
g2d.setColor(Color.RED);
g2d.drawString("Hallo Echo",10,20);
g2d.dispose();       
ImageIO.write(img, image_type, new File(filename));
ImageIO.write(image, image_type, out);

Die Angaben width und height in Zeile 1 möchte ich nun nicht mehr vorgeben. Die Breite und Höhe der Grafik sollen sich automatisch anpassen. Geht das überhaupt? Wenn ja, wie? ;)

Viele Grüße
Fats
 

Fats

Bekanntes Mitglied
Hey Danke! :) Hmmm ... hab mir die Klasse mal angesehen, werde aber noch nicht so ganz schlau draus. Vielleicht kannst Du mir noch ein par Anhaltspunkte geben? Ich hatte spontan vorgehabt etwa Folgendes zu basteln:

Code:
int w = new FontMetrics(my_ttf).stringWidth("Hallo Echo");
Aber das geht ja nicht! FontMetrics ist eine abstrakte Klasse. ???:L Muß ich das jetzt selbst schreiben? Kann ich mir kaum vorstellen ...

Hab gesehen, in der Class Font gibt es eine Methode

Code:
Rectangle2D = getStringBounds(String str, FontRenderContext frc)

Das klingt ja auch nicht schlecht. Vielleicht läßt sich ja damit was anfangen. Aber dann fehlt mir der FontRenderContext! Den bekommt man über eine getMethode vom FontMetrics Objekt .... das ich aber nicht erstellen kann, da es "nur" eine abstrakte Klasse ist!! Hilfe ich dreh mich im Kreis!! Was muß man jetzt mit wem, in welcher Mischung zusammenrühren, damit da was Schmackhaftes bei rauskommt?

Viele Grüße
Fats
 

kaie

Bekanntes Mitglied
Erzeugt Dir doch einfach erstmal ein Hilfsbild der Größe 1x1 und berechne die Abmessungen darauf:
Code:
BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
FontMetrics fm = g2d.getFontMetrics();
img = new BufferedImage(fm.stringWidth("Hallo Echo"),fm.getHeight(),BufferedImage.TYPE_INT_ARGB);
g2d = img.createGraphics();
g2d.setColor(Color.RED); 
g2d.drawString("Hallo Echo",0,fm.getAscent()); 
g2d.dispose();
ImageIO.write(img, image_type, new File(filename)); 
ImageIO.write(image, image_type, out);
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben