# Welchen Platz braucht ein Text?



## Fats (6. Feb 2007)

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:


```
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


----------



## hupfdule (6. Feb 2007)

Ja, das Stichwort ist FontMetrics.


----------



## Fats (6. Feb 2007)

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:


```
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


```
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 (7. Feb 2007)

Erzeugt Dir doch einfach erstmal ein Hilfsbild der Größe 1x1 und berechne die Abmessungen darauf:

```
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);
```


----------



## Fats (8. Feb 2007)

kaie hat gesagt.:
			
		

> Erzeugt Dir doch einfach erstmal ein Hilfsbild der Größe 1x1 und berechne die Abmessungen darauf:
> [...]


Mensch, klar! Wo hatte ich nur meinen Kopf?!  :wink: 
Vielen Dank!

Fats


----------

