Muszę przekonwertować piksele na punkty w C #. Widziałem kilka skomplikowanych wyjaśnień na ten temat, ale nie mogę znaleźć prostego wzoru. Załóżmy, że standardowe 96 dpi, jak obliczyć tę konwersję?
Muszę przekonwertować piksele na punkty w C #. Widziałem kilka skomplikowanych wyjaśnień na ten temat, ale nie mogę znaleźć prostego wzoru. Załóżmy, że standardowe 96 dpi, jak obliczyć tę konwersję?
Odpowiedzi:
Na cal przypada 72 punkty ; jeśli wystarczy przyjąć 96 pikseli na cal, wzór jest raczej prosty:
punkty = piksele * 72/96
Istnieje sposób na pobranie skonfigurowanych pikseli na cal ekranu w systemie Windows przy użyciu GetDeviceCaps
. Firma Microsoft ma przewodnik zatytułowany „Tworzenie aplikacji obsługujących rozdzielczość”. Poszukaj sekcji „Tworzenie czcionek obsługujących rozdzielczość DPI”.
W3C zdefiniował pomiar pikseli px
jako dokładnie 1/96 z 1 cala, niezależnie od rzeczywistej rozdzielczości ekranu, więc powyższy wzór powinien być dobry dla wszystkich prac internetowych.
Zakładając, że 96dpi to ogromny błąd. Nawet jeśli założenie jest słuszne, istnieje również opcja skalowania czcionek. Zatem czcionka ustawiona na 10 punktów może w rzeczywistości być wyświetlana tak, jakby wynosiła 12,5 punktu (125%).
Zaczynając od podanych:
Jeśli chcesz znaleźć punkty (pt) na podstawie pikseli (px):
72 pt x pt
------ = ----- (1) for 150dpi system
150 px y px
Zmiana układu:
x = (y/150) * 72 (2) for 150dpi system
więc:
points = (pixels / 150) * 72 (3) for 150dpi system
WPF konwertuje punkty na piksele za pomocą System.Windows.FontSizeConverter. FontSizeConverter używa System.Windows.LengthConverter. LengthConverter wykorzystuje współczynnik 1.333333333333333333 do konwersji punktów (p) na piksele (x): x = p * 1.3333333333333333
System.Drawing.Graphics ma właściwości DpiX i DpiY. DpiX to piksele na cal w poziomie. DpiY to piksele na cal w pionie. Użyj ich do konwersji punktów (72 punkty na cal) na piksele.
Np .: 14 punktów poziomych = (14 * DpiX) / 72 piksele
Z pewnością całe to pytanie powinno brzmieć:
„Jak uzyskać poziomy i pionowy PPI (piksele na cal) monitora?”
W calu znajdują się 72 punkty (z definicji „punkt” jest definiowany jako 1/72 cala, podobnie jak „pica” jest definiowany jako 1/72 stopy). Dzięki tym dwóm bitom informacji możesz bardzo łatwo przekonwertować z px na pt iz powrotem.
punkty = (piksele / 96) * 72 na standardowym komputerze XP / Vista / 7 (ustawienia fabryczne)
punkty = (piksele / 72) * 72 na standardowym komputerze Mac z systemem OSX (ustawienia fabryczne)
Windows działa domyślnie z rozdzielczością 96 dpi (wyświetlacz) Komputery Mac domyślnie działają z rozdzielczością 72 dpi (wyświetlacz)
72 punkty POSTSCRIPT = 1 cal 12 punktów POSTSCRIPT = 1 POSTSCRIPT Pica 6 POSTSCRIPT Picas = 72 punkty = 1 cal
1 punkt = 1⁄72 cala = 25,4⁄72 mm = 0,3527 mm
DPI = Kropki na cal PPI = Piksele na cal LPI = Linie na cal
Więcej informacji, jeśli używasz em jako pomiaru
16px = 1em (domyślnie dla zwykłego tekstu) 8em = 16px * 8 pikseli / 16 = em
To działa:
int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f);
Używanie wxPython na Macu, aby uzyskać prawidłowe DPI w następujący sposób:
from wx import ScreenDC
from wx import Size
size: Size = ScreenDC().GetPPI()
print(f'x-DPI: {size.GetWidth()} y-DPI: {size.GetHeight()}')
To daje:
x-DPI: 72 y-DPI: 72
Zatem wzór jest następujący:
points: int = (pixelNumber * 72) // 72
Linie wysokości zamienione na punkty i piksele (moja własna formuła). Oto przykład z ręcznym wprowadzeniem 213,67 punktów w polu Wysokość wiersza:
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
Tutaj ręczne wprowadzenie 213,67 punktów daje 284 piksele.
Tutaj ręczne wprowadzenie 213,68 punktów daje 285 pikseli.
(Dlaczego 0,45? Nie wiem, ale działa.)