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



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

752   11  

11 ответов:

здесь 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();

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

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

  • есть 72 точки в дюйме (это то, что точка, 1/72 дюйма)
  • в системе, установленной для 150dpi, есть 150 пикселей на дюйм.
  • 1 в = 72pt = 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 преобразует точки в пиксели с помощью системы.Окна.FontSizeConverter. FontSizeConverter использует систему.Окна.Преобразователь длины. Преобразователь длины использует коэффициент 1.3333333333333333333333 для преобразования из точек (p) в пиксели (x): x = p * 1.3333333333333333

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

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

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

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

points = pixels * 96 / 72

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

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

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

72 точки постскриптума = 1 дюйм 12 поинтах = 1 постскриптум пика 6 постскриптум Picas = 72 точки = 1 дюйм

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

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

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

16px = 1em (по умолчанию для обычного текста) 8em = 16px * 8 Pixels / 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? Я не знаю, но это работает.)

Comments

    Ничего не найдено.