Necesito convertir píxeles a puntos en C #. He visto algunas explicaciones complicadas sobre el tema, pero parece que no puedo encontrar una fórmula simple. Supongamos un estándar de 96 ppp, ¿cómo calculo esta conversión?
Necesito convertir píxeles a puntos en C #. He visto algunas explicaciones complicadas sobre el tema, pero parece que no puedo encontrar una fórmula simple. Supongamos un estándar de 96 ppp, ¿cómo calculo esta conversión?
Respuestas:
Hay 72 puntos por pulgada ; Si es suficiente asumir 96 píxeles por pulgada, la fórmula es bastante simple:
puntos = píxeles * 72/96
Hay una manera de obtener los píxeles configurados por pulgada de su pantalla en Windows usando GetDeviceCaps
. Microsoft tiene una guía llamada "Desarrollo de aplicaciones compatibles con DPI" , busque la sección "Creación de fuentes compatibles con DPI".
El W3C ha definido la medición de píxeles px
como exactamente 1/96 de 1 pulgada, independientemente de la resolución real de su pantalla, por lo que la fórmula anterior debería ser buena para todo el trabajo web.
Asumir 96 ppp es un gran error. Incluso si la suposición es correcta, también hay una opción para escalar las fuentes. Por lo tanto, un conjunto de fuentes para 10 puntos puede mostrarse como si fuera 12,5 puntos (125%).
Comenzando con lo dado:
Si desea encontrar puntos (pt) basados en píxeles (px):
72 pt x pt
------ = ----- (1) for 150dpi system
150 px y px
Reorganizando:
x = (y/150) * 72 (2) for 150dpi system
entonces:
points = (pixels / 150) * 72 (3) for 150dpi system
WPF convierte puntos a píxeles con System.Windows.FontSizeConverter. FontSizeConverter utiliza System.Windows.LengthConverter. El convertidor de longitud usa el factor 1.333333333333333333 para convertir de puntos (p) a píxeles (x): x = p * 1.3333333333333333
Seguramente toda esta pregunta debería ser:
"¿Cómo obtengo el PPI horizontal y vertical (píxeles por pulgada) del monitor?"
Hay 72 puntos en una pulgada (por definición, un "punto" se define como 1/72 de pulgada, del mismo modo que una "pica" se define como 1/72 de pie). Con estos dos bits de información puede convertir de px a pt y viceversa con mucha facilidad.
puntos = (píxeles / 96) * 72 en una máquina XP / Vista / 7 estándar (valores predeterminados de fábrica)
puntos = (píxeles / 72) * 72 en una Mac estándar con OSX (valores predeterminados de fábrica)
Windows se ejecuta de manera predeterminada a 96 ppp (pantalla) Las Mac se ejecutan de manera predeterminada a 72 ppp (pantalla)
72 puntos POSTSCRIPT = 1 pulgada 12 puntos POSTSCRIPT = 1 POSTSCRIPT Pica 6 POSTSCRIPT Picas = 72 puntos = 1 pulgada
1 punto = 1⁄72 pulgadas = 25.4⁄72 mm = 0.3527 mm
DPI = Puntos por pulgada PPI = Píxeles por pulgada LPI = Líneas por pulgada
Más información si usa em como medida
16px = 1em (predeterminado para texto normal) 8em = 16px * 8 píxeles / 16 = em
Esto funciona:
int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f);
Usando wxPython en Mac para obtener el DPI correcto de la siguiente manera:
from wx import ScreenDC
from wx import Size
size: Size = ScreenDC().GetPPI()
print(f'x-DPI: {size.GetWidth()} y-DPI: {size.GetHeight()}')
Esto produce:
x-DPI: 72 y-DPI: 72
Por lo tanto, la fórmula es:
puntos: int = (pixelNumber * 72) // 72
Líneas de altura convertidas en puntos y píxeles (mi propia fórmula). Aquí hay un ejemplo con una entrada manual de 213.67 puntos en el campo Altura de fila:
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
Aquí la entrada manual de 213.67 puntos da 284 píxeles.
Aquí la entrada manual de 213.68 puntos da 285 píxeles.
(¿Por qué 0,45? No lo sé pero funciona).