Ich muss Pixel in Punkte in C # konvertieren. Ich habe einige komplizierte Erklärungen zu diesem Thema gesehen, kann aber keine einfache Formel finden. Nehmen wir einen Standardwert von 96 dpi an. Wie berechne ich diese Konvertierung?
Ich muss Pixel in Punkte in C # konvertieren. Ich habe einige komplizierte Erklärungen zu diesem Thema gesehen, kann aber keine einfache Formel finden. Nehmen wir einen Standardwert von 96 dpi an. Wie berechne ich diese Konvertierung?
Antworten:
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 Ihres Displays in Windows mithilfe von zu ermitteln GetDeviceCaps
. Microsoft hat eine Anleitung mit dem Titel "Entwickeln von DPI-Aware-Anwendungen" . Lesen Sie den Abschnitt "Erstellen von DPI-Aware-Schriftarten".
Das W3C hat die Pixelmessung unabhängig von der tatsächlichen Auflösung Ihres Displays px
als genau 1/96 von 1 Zoll definiert. Daher sollte die obige Formel für alle Webarbeiten geeignet sein .
Die Annahme von 96 dpi ist ein großer Fehler. Auch wenn die Annahme richtig ist, gibt es auch eine Option zum Skalieren von Schriftarten. Eine für 10 Punkte festgelegte Schriftart kann also tatsächlich so angezeigt werden, als ob sie 12,5 Punkte (125%) beträgt.
Beginnend mit dem Gegebenen:
Wenn Sie Punkte (pt) basierend auf Pixeln (px) finden möchten:
72 pt x pt
------ = ----- (1) for 150dpi system
150 px y px
Neuanordnung:
x = (y/150) * 72 (2) for 150dpi system
so:
points = (pixels / 150) * 72 (3) for 150dpi system
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 von Punkten (p) in Pixel (x) zu konvertieren: x = p * 1.3333333333333333
System.Drawing.Graphics verfügt über DpiX- und DpiY-Eigenschaften. DpiX ist horizontal Pixel pro Zoll. DpiY ist vertikal Pixel pro Zoll. Verwenden Sie diese, um von Punkten (72 Punkte pro Zoll) in Pixel umzuwandeln.
Beispiel: 14 horizontale Punkte = (14 * DpiX) / 72 Pixel
Sicherlich sollte diese ganze Frage lauten:
"Wie erhalte ich den horizontalen und vertikalen PPI (Pixel pro Zoll) des Monitors?"
Es gibt 72 Punkte in einem Zoll (per Definition ist ein "Punkt" als 1/72 Zoll definiert, ebenso ein "Pica" als 1/72 Fuß). Mit diesen beiden Informationen können Sie sehr einfach von px nach pt und zurück konvertieren.
Punkte = (Pixel / 96) * 72 auf einem Standard-XP / Vista / 7-Computer (Werkseinstellungen)
Punkte = (Pixel / 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 bei Verwendung als Messgröße
16px = 1em (Standard für normalen Text) 8em = 16px * 8 Pixel / 16 = em
Das funktioniert:
int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f);
Verwenden Sie wxPython auf einem Mac, um die richtige DPI wie folgt zu erhalten:
from wx import ScreenDC
from wx import Size
size: Size = ScreenDC().GetPPI()
print(f'x-DPI: {size.GetWidth()} y-DPI: {size.GetHeight()}')
Dies ergibt:
x-DPI: 72 y-DPI: 72
Die Formel lautet also:
Punkte: int = (pixelNumber * 72) // 72
Höhenlinien in Punkte und Pixel umgewandelt (meine eigene Formel). Hier ist ein Beispiel mit einer manuellen Eingabe von 213,67 Punkten in das Feld Zeilenhöhe:
213.67 Manual Entry
0.45 Add 0.45
214.12 Subtotal
213.75 Round to a multiple of 0.75
213.00 Subtract 0.75 provides manual entry converted by Excel
284.00 Divide by 0.75 gives the number of pixels of height
Hier ergibt die manuelle Eingabe von 213,67 Punkten 284 Pixel.
Hier ergibt die manuelle Eingabe von 213,68 Punkten 285 Pixel.
(Warum 0,45? Ich weiß es nicht, aber es funktioniert.)