Pregunta

Necesito convertir los píxeles en puntos en C #. He visto algunas explicaciones complicadas sobre el tema, pero parece que no puedo encontrar una fórmula simple. Supongamos una 96 ppp estándar, ¿cómo puedo calcular esta conversión?

¿Fue útil?

Solución

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 " , mire para la sección " Creación de fuentes DPI-Aware " ;.

El W3C ha definido la medición de píxeles px como exactamente 1 / 96th of 1in independientemente de la resolución real de su pantalla, por lo que la fórmula anterior debe ser válida para todos los trabajos web.

Otros consejos

Intente esto si su código se encuentra en un formulario:

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

Suponiendo que 96 ppp es un error enorme . 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:

  • Hay 72 puntos en una pulgada (eso es un punto, 1/72 de pulgada)
  • en un sistema configurado para 150 ppp, hay 150 píxeles por pulgada.
  • 1 in = 72pt = 150px (para configuración de 150 ppp)

Si quieres encontrar puntos (pt) basados ??en píxeles (px):

 72 pt    x pt
------ = -----                  (1) for 150dpi system
150 px    y px

Reorganización:

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 utiliza el factor 1.33333333333333333333 para convertir de puntos (p) a píxeles (x): x = p * 1.3333333333333333

System.Drawing.Graphics tiene propiedades DpiX y DpiY. DpiX es píxeles por pulgada horizontalmente. DpiY es píxeles por pulgada verticalmente. Utilícelas para convertir de puntos (72 puntos por pulgada) a píxeles.

Ej: 14 puntos horizontales = (14 * DpiX) / 72 píxeles

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, así como una pica se define como 1/72 de pie). Con estos dos bits de información, puede convertir de px a pt y viceversa muy fácilmente.

En realidad debe ser

points = pixels * 96 / 72

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 por defecto 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 & # 8260; 72 pulgadas = 25.4 & # 8260; 72 mm = 0.3527 mm

DPI = puntos por pulgada PPI = píxeles por pulgada LPI = Líneas por pulgada

Más información si se usa em como medición

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);

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.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top