Конвертировать пиксели в очки - PullRequest
118 голосов
/ 26 сентября 2008

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

Ответы [ 11 ]

184 голосов
/ 26 сентября 2008

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

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

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

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

55 голосов
/ 03 июля 2009

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

Graphics g = this.CreateGraphics();
points = pixels * 72 / g.DpiX;
g.Dispose();
24 голосов
/ 26 сентября 2008

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

18 голосов
/ 10 августа 2009

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

  • Есть 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
10 голосов
/ 02 сентября 2010

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

4 голосов
/ 26 августа 2011

баллов = (пикселей / 96) * 72 на стандартном компьютере с XP / Vista / 7 (заводские настройки)

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

Windows работает по умолчанию с разрешением 96 точек на дюйм (дисплей) Mac по умолчанию работают с разрешением 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 = строк на дюйм

Больше информации при использовании em в качестве измерения

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

4 голосов
/ 12 июля 2010

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

points = pixels * 96 / 72
4 голосов
/ 26 сентября 2008

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

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

4 голосов
/ 26 сентября 2008

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

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

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

1 голос
/ 07 августа 2016

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

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