Вопрос

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

  • В одном дюйме 72 точки (это и есть точка — 1/72 дюйма).
  • в системе, настроенной на 150 точек на дюйм, на дюйм приходится 150 пикселей.
  • 1 дюйм = 72 пт = 150 пикселей (для настройки 150 точек на дюйм)

Если вы хотите найти точки (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):х = р * 1,3333333333333333

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

Бывший:14 точек по горизонтали = (14 * DpiX) / 72 пикселя

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

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

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

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

points = pixels * 96 / 72

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

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

Windows работает по умолчанию по адресу 96DPI (дисплей) Macs запускается по умолчанию при 72 DPI (дисплей)

72 PostScript Points = 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 пикселей/16 = em

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top