У мене є необхідність конвертувати пікселі в точки в C #. Я бачив кілька складних пояснень щодо цієї теми, але не можу знайти просту формулу. Припустимо, стандартний 96dpi, як я визначити цю конверсію?
У мене є необхідність конвертувати пікселі в точки в C #. Я бачив кілька складних пояснень щодо цієї теми, але не можу знайти просту формулу. Припустимо, стандартний 96dpi, як я визначити цю конверсію?
Відповіді:
Є 72 точок на дюйм ; якщо достатньо припустити 96 пікселів на дюйм, формула досить проста:
бали = пікселі * 72/96
Існує спосіб отримати налаштовані пікселі на дюйм вашого дисплея за допомогою Windows GetDeviceCaps
. Microsoft має посібник під назвою "Розробка програм DPI-Aware" , шукайте розділ "Створення шрифтів DPI-Aware".
W3C визначив вимірювання пікселів px
як рівно 1/96 частини 1 дюйму незалежно від фактичної роздільної здатності вашого дисплея, тому вищевказана формула повинна бути хорошою для всієї роботи в Інтернеті.
Якщо припустити 96dpi - це величезна помилка. Навіть якщо припущення правильне, також існує можливість масштабування шрифтів. Тож набір шрифтів у 10 копійок може відображатись так, ніби він 12,5пт (125%).
Починаючи з даного:
Якщо ви хочете знайти точки (pt) на основі пікселів (px):
72 pt x pt
------ = ----- (1) for 150dpi system
150 px y px
Перестановка:
x = (y/150) * 72 (2) for 150dpi system
так:
points = (pixels / 150) * 72 (3) for 150dpi system
WPF перетворює точки в пікселі за допомогою System.Windows.FontSizeConverter. FontSizeConverter використовує System.Windows.LengthConverter. LongConverter використовує коефіцієнт 1.333333333333333333 для перетворення з точок (p) в пікселі (x): x = p * 1.3333333333333333
System.Drawing.Graphics має властивості DpiX та DpiY. DpiX - це пікселі на дюйм по горизонталі. DpiY - це пікселі на дюйм вертикально. Використовуйте їх для перетворення з точок (72 бали на дюйм) у пікселі.
Наприклад: 14 горизонтальних точок = (14 * DpiX) / 72 пікселів
Безумовно, все це питання повинно бути:
"Як мені отримати горизонтальну та вертикальну ІРЦ (пікселі на дюйм) монітора?"
У дюймі є 72 точки (за визначенням, "точка" визначається як 1/72 дюйма, аналогічно "піка" визначається як 1/72 фута). За допомогою цих двох бітів інформації ви можете легко перетворити з px в pt і назад дуже легко.
бали = (пікселі / 96) * 72 на стандартній машині XP / Vista / 7 (заводські настройки)
бали = (пікселі / 72) * 72 на стандартному Mac OS OS (Заводські настройки)
Windows працює за замовчуванням при 96dpi (дисплей) Маки працюють за замовчуванням при 72 dpi (дисплей)
72 POSTSCRIPT очок = 1 дюйм 12 POSTSCRIPT очок = 1 POSTSCRIPT Pica 6 POSTSCRIPT Picas = 72 бали = 1 дюйм
1 бал = 1,72 дюйма = 25,4⁄72 мм = 0,3527 мм
DPI = крапки на дюйм PPI = пікселі на дюйм LPI = лінії на дюйм
Більше інформації, якщо використовувати їх як вимірювання
16px = 1em (стандартний текст за замовчуванням) 8em = 16px * 8 пікселів / 16 = em
Це працює:
int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f);
Використання wxPython на Mac для отримання правильного DPI наступним чином:
from wx import ScreenDC
from wx import Size
size: Size = ScreenDC().GetPPI()
print(f'x-DPI: {size.GetWidth()} y-DPI: {size.GetHeight()}')
Це дає:
x-DPI: 72 y-DPI: 72
Таким чином, формула така:
балів: int = (pixelNumber * 72) // 72
Рядки висоти, перетворені в точки і пікселі (моя власна формула). Ось приклад із введенням вручну 213,67 балів у полі висота рядка:
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
Тут вручну введення 213,67 балів дає 284 пікселів.
Тут ручне введення 213,68 балів дає 285 пікселів.
(Чому 0,45? Я не знаю, але це працює.)