it-swarm.com.de

Konvertieren Sie Pixel in Punkte

Ich muss Pixel in Punkte in C # konvertieren. Ich habe einige komplizierte Erklärungen zu diesem Thema gesehen, kann aber scheinbar keine einfache Formel finden. Nehmen wir einen Standard von 96 dpi an. Wie berechne ich diese Konvertierung?

120
Todd Davis

Es gibt 72 Punkte pro Zoll ; Wenn es ausreicht, 96 Pixel pro Zoll anzunehmen, ist die Formel ziemlich einfach:

punkte = Pixel * 72/96

Es gibt eine Möglichkeit, die konfigurierten Pixel pro Zoll Ihrer Anzeige in Windows mit GetDeviceCaps zu ermitteln. Microsoft hat eine Anleitung namens "DPI-Aware-Anwendungen entwickeln" , suchen Sie im Abschnitt "DPI-Aware-Schriftarten erstellen".

Der W3C hat die Pixelmessung px als genau 1/96 von 1 Zoll definiert, unabhängig von der tatsächlichen Auflösung Ihres Displays. Daher sollte die obige Formel für alle Webarbeiten geeignet sein.

186
Mark Ransom

Versuchen Sie dies, wenn Ihr Code in einem Formular liegt:

Graphics g = this.CreateGraphics();
points = pixels * 72 / g.DpiX;
g.Dispose();
56
Hejazi

Angenommen, 96 dpi ist ein großer Fehler. Auch wenn die Annahme richtig ist, gibt es auch eine Option zum Skalieren von Schriftarten. Daher wird eine Schrift, die auf 10 Punkte eingestellt ist, möglicherweise als 12,5 Punkte (125%) angezeigt.

24
Joel Coehoorn

Beginnend mit dem Gegebenen:

  • Es gibt 72 Punkte in einem Zoll (das ist, was ein Punkt ist, 1/72 Zoll)
  • auf einem System, das auf 150 dpi eingestellt ist, gibt es 150 Pixel pro Zoll.
  • 1 in = 72pt = 150px (für 150 dpi Einstellung)

Wenn Sie Punkte (pt) basierend auf Pixeln (px) finden möchten:

 72 pt    x pt
------ = -----                  (1) for 150dpi system
150 px    y px

Neuordnung:

x = (y/150) * 72                (2) for 150dpi system

so:

points = (pixels / 150) * 72    (3) for 150dpi system
18
Ian Boyd

WPF konvertiert Punkte mit dem System.Windows.FontSizeConverter in Pixel. Der FontSizeConverter verwendet den System.Windows.LengthConverter. Der LengthConverter verwendet den Faktor 1.33333333333333333333, um Punkte (p) in Pixel (x) umzuwandeln: x = p * 1.3333333333333333

10
Heind

points = (pixels/96) * 72 auf einem Standard-XP/Vista/7-Computer (Werkseinstellungen)

points = (pixels/72) * 72 auf einem Standard-Mac mit OSX (Werkseinstellungen)

Windows wird standardmäßig mit 96 dpi (Anzeige) ausgeführt Macs werden standardmäßig mit 72 dpi (Anzeige) ausgeführt

72 POSTSCRIPT-Punkte = 1 Zoll 12 POSTSCRIPT-Punkte = 1 POSTSCRIPT Pica 6 POSTSCRIPT Picas = 72 Punkte = 1 Zoll

1 Punkt = 1 × 72 Zoll = 25,4 × 72 mm = 0,3527 mm

DPI = Punkte pro Zoll PPI = Pixel pro Zoll LPI = Linien pro Zoll

Weitere Informationen, wenn Sie sie als Messgerät verwenden

16px = 1em (Standard für normalen Text) 8em = 16px * 8 Pixel/16 = em

4
Bubba Tbone

Eigentlich muss es sein

points = pixels * 96 / 72
4
david

Sicherlich sollte diese ganze Frage lauten:

"Wie erhalte ich die horizontale und vertikale PPI (Pixels Per Inch) des Monitors?"

Es gibt 72 Punkte in einem Zoll (per Definition wird ein "Punkt" als 1/72 Zoll definiert, ebenso wird ein "Pica" als 1/72 Fuß definiert). Mit diesen beiden Informationen können Sie ganz einfach von px nach pt und zurück konvertieren.

4
JeeBee

System.Drawing.Graphics verfügt über die Eigenschaften DpiX und DpiY. DpiX ist horizontal Pixel pro Zoll. DpiY ist vertikal Pixel pro Zoll. Verwenden Sie diese, um Punkte (72 Punkte pro Zoll) in Pixel umzuwandeln.

Beispiel: 14 horizontale Punkte = (14 * DpiX)/72 Pixel

4
spotcatbug

Das funktioniert:

int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f);
1
Michael Zhang