# Schriftgröße aus vorhandenem Platz berechnen



## .joe (15. Feb 2008)

Hi,

ich suche eine Möglichkeit die maximale Schriftgröße zu berechnen um in einem gegebenen Rechteck einen gegebenen Text zu zeichnen.

Einzige mir bekannte Möglichkeit ist eine Schriftgröße zu wählen und dann über das FontMetrics-Objekt zu testen wie hoch und breit der Text mit dieser Schriftgröße wird. Ich möchte aber möglichst auf diese Bruteforce-Variante verzichten und nicht mehrere Schriftgrößen durchtesten um eine passende zu finden.


----------



## André Uhres (15. Feb 2008)

.joe hat gesagt.:
			
		

> ..die maximale Schriftgröße zu berechnen um in einem gegebenen Rechteck einen gegebenen Text zu zeichnen..


Du vergisst dabei die Schriftart :wink:
Übrigens ist es in der Informatik keine Seltenheit, dass für ein bestimmtes Problem kein effizienter Algorithmus existiert.


----------



## .joe (15. Feb 2008)

ja ich bin davon ausgegangen das wäre klar.

sicher sind einige probleme nicht effizient lösbar, dieses stelle ich mir aber durchaus lösbar vor da es ja prinzipiell nur um eine umrechnung von punkt zu pixel gehen müste und das in die andere richtung funktioniert.


----------



## André Uhres (16. Feb 2008)

.joe hat gesagt.:
			
		

> ..in die andere richtung funktioniert.


Dann dreh deinen Algorithmus einfach um


----------



## .joe (16. Feb 2008)

wenn ich wüsste wie der implementiert ist und ich das so einfach machen könnte würde ich nicht hier fragen.


----------



## André Uhres (16. Feb 2008)

.joe hat gesagt.:
			
		

> wenn ich wüsste wie der implementiert ist..


Was weisst du denn davon?


----------



## .joe (16. Feb 2008)

kannst du mir helfen oder nicht? 
wenn nicht spar dir gegenfragen die das thema nicht voran bringen, danke. ich weis nicht, was so undeutlich an meiner aussage war das ich nicht weis wie es geht.


----------



## André Uhres (16. Feb 2008)

.joe hat gesagt.:
			
		

> ..ich weis nicht, was so undeutlich an meiner aussage war das ich nicht weis wie es geht.


Naja, wenn jemand sagt, etwas müsse seiner Meinung nach gehen, dann denk ich mal, 
dass er eine gewisse Vorstellung davon hat, wie es gehen könnte, 
auch wenn er mit die Implementierung nicht klar kommt. 
Aber da wir beide keine Idee haben, ist es wohl Essig.


----------



## .joe (17. Feb 2008)

so, ich hatte heute eine erleuchtung nach wochen.
hier eine mögliche lösung, für alle die auf das gleiche problem stoßen:


```
public static Font calculateFontSize(Graphics g, String fontName, int fontStyle,
		String text, int width, int height) {
		
	FontMetrics metrics = g.getFontMetrics(new Font(fontName, fontStyle, 10));
	float heightFactor = height/(float)metrics.getHeight();
	float widthFactor = width/(float)metrics.stringWidth(text);
		
	return new Font(fontName, fontStyle, (int) Math.floor(10*Math.min(heightFactor, widthFactor)));
}
```


----------



## André Uhres (17. Feb 2008)

.joe hat gesagt.:
			
		

> ..hier eine mögliche lösung..


Das könnte u.U. passen, leider imho nicht ganz zufriedenstellend.
Hier nur ein zufälliges Beispiel: "Arial",Font.PLAIN,"Das könnte u.U. passen",300,30
damit kommt Fontsize 23 statt 26 raus


----------

