Преобразование пикселей в точки

Мне нужно преобразовать пиксели в точки в С#. Я видел несколько сложных объяснений по теме, но не могу найти простой формулы. Предположим, что стандартное 96dpi, как я могу преобразовать это преобразование?

Ответ 1

72 точки на дюйм; если достаточно принять 96 пикселей на дюйм, формула довольно проста:

points = pixels * 72/96

Существует способ получить настроенные пиксели на дюйм вашего дисплея в Windows с помощью GetDeviceCaps. В Microsoft есть руководство под названием "Разработка приложений DPI-Aware" , найдите раздел "Создание шрифтов DPI-Aware".

W3C определил измерение пикселя px как ровно 1/96th of 1in, независимо от фактического разрешения вашего дисплея, поэтому выше формула должна быть хорошей для всех веб-работ.

Ответ 2

Попробуйте, если ваш код находится в форме:

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

Ответ 3

Предполагая, что 96dpi - огромная ошибка. Даже если предположение верно, есть также возможность масштабирования шрифтов. Таким образом, шрифт, установленный для 10pts, может быть показан как 12.5pt (125%).

Ответ 4

Начиная с данного:

  • Есть 72 точки в дюйме (это то, что точка, 1/72 дюйма).
  • в системном наборе для 150 точек на дюйм имеется 150 пикселей на дюйм.
  • 1 in = 72pt = 150px (для настройки 150dpi)

Если вы хотите найти точки (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

Ответ 5

WPF преобразует точки в пиксели с помощью System.Windows.FontSizeConverter. В FontSizeConverter используется System.Windows.LengthConverter. The LengthConverter использует коэффициент 1.333333333333333333 для преобразования из точек (p) в пиксели (x): x = p * 1.3333333333333333

Ответ 6

Конечно, весь этот вопрос должен быть:

"Как получить горизонтальный и вертикальный PPI (пиксели на дюйм) монитора?"

Есть 72 точки в дюйме (по определению "точка" определяется как 1/72-й дюйм, так же "pica" определяется как 1/72-й ноги). С этими двумя битами информации вы можете легко конвертировать из px в pt и обратно.

Ответ 7

System.Drawing.Graphics имеет свойства DpiX и DpiY. DpiX - пиксели на дюйм по горизонтали. DpiY - пиксели на дюйм по вертикали. Используйте те, чтобы конвертировать из точек (72 точки на дюйм) в пиксели.

Пример: 14 горизонтальных точек = (14 * DpiX)/72 пикселя

Ответ 8

На самом деле это должно быть

points = pixels * 96 / 72

Ответ 9

points = (pixels/96) * 72 на стандартной машине XP/Vista/7 (factory по умолчанию)

points = (pixels/72) * 72 на стандартном Mac с OSX (factory по умолчанию)

Windows работает по умолчанию на 96 точек на дюйм (дисплей) Mac работает по умолчанию на 72 dpi (отображение)

72 POSTSCRIPT Баллы = 1 дюйм 12 POSTSCRIPT Баллы = 1 POSCSCRIPT Pica 6 POSTSCRIPT Picas = 72 Точки = 1 дюйм

1 точка = 1/72 дюйма = 25,4/72 мм = 0,3527 мм

DPI = Точки на дюйм PPI = пикселы на дюйм LPI = линии на дюйм

Дополнительная информация, если используется em как измерение

16px = 1em (по умолчанию для обычного текста) 8em = 16px * 8 Пиксели /16 = em

Ответ 10

Это работает:

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

Ответ 11

Высота линий, преобразованных в точки и пиксель (моя собственная формула). Вот пример с ручным вводом 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? Я не знаю, но он работает.)