# Pixelanzahl eines Strings ermitteln



## chrisfe111 (26. Nov 2007)

Hallo

Ich habe folgendes Problem:

Ich habe eine beliebige Zeichenfolge mit der Schriftart Tahoma und Schriftgröße 9 Punkt.

Ich möchte nun wissen wie viele Pixel diese Zeichenfolge breit ist.

Beispielzeichenfolge:
Das ist ein Test.

Gibt es in Java eine Möglichkeit die Anzahl der Pixel dieses Satzes mit oben beschriebener Schriftart und -Größe zu ermitteln.

Oder kennt jemand einen Windows-API Aufruf der diese Aufgabe erledigt.

Bitte um Hilfe

lg Christian


----------



## tfa (26. Nov 2007)

FontMetrics.stringWidth(String)


----------



## Niki (26. Nov 2007)

Du brauchst dafür den Graphics-Context deiner Komponente, so würde es gehen:

```
String s = "Das ist ein Test";
component.getGraphics().getFontMetrics().getStringBounds(s, 0, s.length(), getGraphics());
```


----------



## chrisfe111 (26. Nov 2007)

Danke für die raschen Antworten

FontMetrics hört sich schon sehr gut an, aber wie gebe ich die verwendete Schriftart und Schriftgröße mit an?

lg Christian


----------



## Niki (26. Nov 2007)

Ich tippe mal, da du ja die FontMetrics über den graphics-context bekommst, wird der Font des graphics-Context verwendet. jlabel.getGraphics().getFontMe....

Ich glaube mich aber dunkel daran erinnern zu können, das die Komponenten bereits "visible" sein muss, damit das funktioniert


----------



## The_S (27. Nov 2007)

Component#getFontMetrics(Font f)

Soweit ich weiß, muss die Componente nicht visible sein. Aber ein kleiner Test sollte da auffschluss geben  .


----------



## chrisfe111 (27. Nov 2007)

Hallo

FontMetrics metrics = Toolkit.getDefaultToolkit().getFontMetrics(font);

Der Java-Compiler meldet das die Methode getFontMetrics depricated ist. Was kann ich statt dieser Methode verwenden, und vorallem wie?

Danke und lg Christian


----------



## Niki (27. Nov 2007)

Wie HobbitimBlutrausch schon geschrieben hat. Über die Komponente, auf der du den String setzen möchtest.
z.B.

```
JLabel label = new JLabel();
label.getFontMetrics(new Font(....));
```


----------



## chrisfe111 (28. Nov 2007)

Hallo

Die Methode getFontMetrics(font) liefert mir die Anzahl der Pixel eines Strings auf dem Bildschirm, das ist jedoch genau das was ich nicht brauche.

Ich will nicht die Anzahl der Pixel eines Strings auf dem Bildschirm zählen, das ist ja abhängig von der Auflösung, sondern ich muss wissen wieviel Pixel ein Zeichen mit einer bestimmten Schriftart und -Größe in Windows hat.

Ich habe folgenden Code geschrieben.


```
String str = "Test";        
        JTextField text = new JTextField();
        
        text.setFont(new Font("Tahoma",Font.PLAIN,9));
        
        Font font = new Font("Tahoma", Font.PLAIN , 12);
        FontMetrics metrics = Toolkit.getDefaultToolkit().getFontMetrics(font);

        int i = metrics.stringWidth(str);
```

Dieser Code liefert mir zurück das der Text "Test" in dieser Schriftart und -Größe eine Länge von 25 Pixel hat.

Schreibe ich den Text "Test" in Paint mit genau der selben Schriftart und -Größe und vergrößere ich anschließend den eingegebenen Text auf 800% und lasse mir den Raster anzeigen, kann ich die einzelnen Pixel des Textes zählen.

Ich komme bei diesem Text auf 24 Pixel, bei längeren Texten weicht die Anzahl der Pixel immer weiter von dem in Java berechneten Wert ab.

Gibt es in Java eine Möglichkeit die Pixel eines Strings zu berechnen, ohne dass die Bildschirmauflösung berücksichtigt wird.

lg und Danke Christian[/img]


----------



## tfa (28. Nov 2007)

stringWidth liefert die Breite des Strings in dem angegebenen Font unabhängig von der Darstellung. Mit Auflösung hat das also nichts zu tun.


			
				javadoc hat gesagt.:
			
		

> Returns the total advance width for showing the specified
> String in this Font.  The advance
> is the distance from the leftmost point to the rightmost point
> on the string's baseline.
> ...



Wenn Du Pixel auf dem Bildschirm zählen willst, nimm getStringBounds().


----------



## chrisfe111 (28. Nov 2007)

Hallo 

Die richtige größe des Fonts ist natürlich 9. Sorry  


```
Font font = new Font("Tahoma", Font.PLAIN , 9);
```

Java berechnet daraus eine Länge von 18 Pixeln. Im Gegensatz zu den richtigen 24 in Paint.

lg Christain


----------



## chrisfe111 (28. Nov 2007)

Danke für die Anwort.

Aber wie erklärt sich dann die Abweichung zwischen JAVA und PAINT :?:  :?:  :?: 

lg Christian


----------



## NTB (28. Nov 2007)

Ich habe jetzt nicht so die Ahnung, wie das genau mit Schriftarten und verschiedenen Auflösungen geht... 
...aber wieso gehst Du eigentlich davon aus, dass Paint das "richtig" macht?

Erzeug den Text doch mal mit Java und mach einen Screenshot und dann zählst Du die Pixel mit der Lupe in einem Bildbearbeitungsprogramm (Paint, Gimp etc). Dann müsstest Du doch auch die Unterschiede erkennen!?


----------

