2008-09-26 15 views
111

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

ответ

172

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

точек = пикселей * 72/96

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

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

+25

72 Баллы за дюйм НЕ спорный предмет, он одинаковый по всем направлениям! – 2008-09-26 14:20:47

+9

@David dpi зависит от отображения, ppi - типографская константа – 2008-09-26 14:21:32

+0

Я так не думаю: http://www.retouchpro.com/forums/archive/t-10019.html – VVS 2008-09-26 14:28:00

4

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

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

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

+0

Чтобы сделать его еще более сложным, я имею дело с выравнивая вещи на AN Reporting Services (RDL) доклад, который в настоящее время превращается в PDF. В конце концов, кто знает, что такое ДОИ? Я использую свое лучшее предположение. :) – 2008-09-26 14:38:20

+0

Вы имеете в виду «Как получить горизонтальный и вертикальный DPI монитора?». PPI - это константа 72. Всегда было и всегда будет. – Xetius 2009-07-03 12:14:33

+1

Пиксели на дюйм, а не очки на дюйм (Pica). – JeeBee 2009-07-03 13:43:03

23

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

4

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

Ex: 14 горизонтальных точек = (14 * DPix)/72 пикселей

51

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

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

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

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

Если вы хотите, чтобы найти точки (PT) на основе пикселей (точек):

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 
4

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

points = pixels * 96/72 
-1

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

10

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

4

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

точек = (пикселей/72) * 72 на стандартном Mac под управлением OSX (заводские настройки по умолчанию)

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

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

1 балл = 1/72 дюйма = 25.4/72 мм = 0,3527 мм

DPI = точек на дюйм ИЦП = пикселей на дюйм LPI = линий на дюйм

Более подробную информацию при использовании им, как измерение

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

1

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

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