2014-11-19 5 views
7

Ich habe eine C# WinForms-Anwendung, die Server-und Client-Seite besteht. Ich verwende TextRenderer.MeasureText(string text, Font font) Methode, um Text zu messen.TextRenderer: Wie man Text misst, als ob es auf Maschine mit unterschiedlichem Dpi war?

In einem Moment muss ich Text auf der Serverseite messen, als ob es auf dem Client war. Ich sende Graphics.DpiX und Graphics.DpiY Werte von Client zu Server. Basierend auf diesen Werten, wie kann ich Text auf der Serverseite messen? Der entscheidende Punkt ist, dass Client- und Server-DPI unterschiedlich sein können.

Ich denke, ich kann Graphics Objekt von Dpi-Werte irgendwie erstellen und TextRenderer.MeasureText(IDeviceContext dc, string text, Font font) Überladung verwenden, um meinen Text zu messen. Aber wie erstellt man Graphics aus nur DpiX und DpiY Werten?

+3

Erstellen Sie das Graphics-Objekt mit Graphics.FromImage() und verwenden Sie eine Dummy-Bitmap, auf der Sie SetResolution() aufgerufen haben. –

+2

@Hans, wenn ich diesen Weg verwende, gibt 'MeasureString (String Text, Font font) 'Methode des' Graphics' Objekts den korrekten Wert zurück, aber 'TextRenderer' scheint' Graphics.DpiX' und 'Graphics nicht zu übernehmen. DpiY' Werte berücksichtigen. Irgendeine Idee, warum konnte das passieren? Ich möchte nicht die 'Graphics.MeasureString (String Text, Font font)' Methode verwenden, da ich weiß, dass sie ungenau sein könnte. –

+0

ich repro. Das war ziemlich überraschend :) Ich habe keine gute Theorie für dieses Verhalten. –

Antwort

0

Sie können diesen Hack versuchen: Wenden Sie die Transformation auf die Schriftgröße an, die Sie zum Messen verwenden: Zeichnen mit einer 12pt-Schriftart auf 120 dpi nimmt die gleiche Anzahl von Pixeln wie Zeichnen mit 12 * 120/96 = 15 auf a 96 dpi.

Verwandte Themen