Schriftgröße aus vorhandenem Platz berechnen

  • Themenstarter Themenstarter .joe
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
J

.joe

Gast
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.
 
.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.
 
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.
 
wenn ich wüsste wie der implementiert ist und ich das so einfach machen könnte würde ich nicht hier fragen.
 
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.
 
.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.
 
so, ich hatte heute eine erleuchtung nach wochen.
hier eine mögliche lösung, für alle die auf das gleiche problem stoßen:

Code:
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)));
}
 
.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
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben