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