px — un píxel físico, el elemento más pequeño de una imagen en la pantalla de un dispositivo. En el desarrollo móvil, px se utiliza como unidad básica de resolución de pantalla y densidad de píxeles (PPI), pero prácticamente nunca se usa para el diseño de interfaces; en su lugar, se utilizan unidades lógicas pt, dp y sp. Este artículo explica en qué se diferencia px de las unidades lógicas, cómo se relacionan la resolución y PPI, y por qué usar px directamente en el código es un antipatrón.
Puntos clave
px (pixel, picture element) — el elemento direccionable más pequeño de una imagen rasterizada o pantalla. Cada píxel almacena información de color en el modelo RGB (rojo, verde, azul) con una profundidad de color de 8 a 10 bits por canal. Las pantallas de los dispositivos móviles modernos contienen millones de píxeles: iPhone 15 Pro — 3 millones, iPad Pro 12.9" — 5.6 millones de píxeles.
El tamaño físico de un píxel depende de la densidad de la pantalla (PPI). En un dispositivo con 326 PPI (iPhone 11), un píxel mide aproximadamente 0.078 mm. En una pantalla con 460 PPI (iPhone 15 Pro) — 0.055 mm. Cuanto menor es el tamaño físico del píxel, mayor es la nitidez de la imagen. Al mismo tiempo, la densidad de píxeles afecta directamente al rendimiento del renderizado: más píxeles = más trabajo para la GPU.
Según Apple, la resolución de la pantalla del iPhone 15 Pro es 1179 × 2556 px con 460 PPI. En comparación, el iPhone SE (3.ª gen.) — 750 × 1334 px con 326 PPI. La diferencia en el número total de píxeles es casi 3 veces, lo que explica los mayores requisitos de GPU en los modelos Pro.
Resolución de pantalla — el número de píxeles físicos en horizontal y vertical. Se escribe en el formato ancho × alto, por ejemplo 1179 × 2556 px. La resolución es una característica fundamental de la pantalla que no se puede cambiar mediante programación; está fijada a nivel de hardware y matriz.
| Dispositivo | Resolución (px) | PPI | Relación de aspecto |
|---|---|---|---|
| iPhone SE (3.ª gen.) | 750 × 1334 | 326 | 16:9 |
| iPhone 14 | 1170 × 2532 | 460 | 19.5:9 |
| iPhone 15 Pro Max | 1290 × 2796 | 460 | 19.5:9 |
| Samsung Galaxy S24 Ultra | 1440 × 3120 | 505 | 19.5:9 |
| Google Pixel 8 Pro | 1344 × 2992 | 490 | 20:9 |
| iPad Pro 12.9" | 2048 × 2732 | 264 | 4:3 |
La resolución en píxeles no debe confundirse con el tamaño lógico de la pantalla (en pt para iOS o dp para Android). Por ejemplo, el iPhone 14 tiene un tamaño lógico de 390 × 844 pt, pero una resolución física de 1170 × 2532 px — exactamente 3 veces mayor, ya que el factor de escala es 3.
PPI (pixels per inch) — el número de píxeles por pulgada de la pantalla. Se calcula mediante la fórmula: PPI = √(ancho² + alto²) / diagonal. Cuanto mayor es el PPI, más pequeños son los píxeles individuales y más suave se ve la imagen. Apple considera que una pantalla Retina tiene un PPI superior a 300 a una distancia de visualización típica.
Las diferentes categorías de dispositivos tienen diferentes densidades: Apple Watch — 326 PPI, iPhone — 326–460 PPI, iPad — 264 PPI, MacBook Pro — 254–264 PPI. Los dispositivos Android clasifican la densidad mediante Density Buckets: mdpi (160 dpi), hdpi (240), xhdpi (320), xxhdpi (480), xxxhdpi (640). Estos buckets determinan qué recurso (imagen, dimens) se cargará para el dispositivo.
Impacto del PPI en el desarrollo: cuanto mayor es la densidad, más memoria se requiere para almacenar texturas e imágenes. Un píxel en una pantalla de 500 PPI requiere 2.5 veces más memoria de GPU que en una pantalla de 320 PPI para el mismo tamaño de elemento lógico. Optimizar los assets para buckets de densidad específicos es una práctica estándar en el desarrollo Android.
Los píxeles físicos (px) se diferencian de las unidades lógicas (pt, dp, sp) en que están vinculados a la resolución del hardware y no se escalan. Las unidades lógicas, por el contrario, abstraen al desarrollador de la pantalla específica, permitiendo que un solo valor de 100 pt se muestre con el mismo tamaño físico en diferentes dispositivos.
| Unidad | Plataforma | Depende de PPI | Escala | Propósito |
|---|---|---|---|---|
| px | Todas | Sí (píxel físico) | No | Imágenes, búferes, Metal |
| pt | iOS/macOS | No (punto lógico) | factor de escala | Layout, UIKit, SwiftUI |
| dp | Android | No (indep. de densidad) | bucket de densidad | Layout, tamaños de elementos |
| sp | Android | No (indep. de escala) | densidad + escala fuente | Texto (textSize) |
Fórmulas de conversión: para iOS — px = pt × scale (donde scale = 1, 2 o 3). Para Android — px = dp × (dpi / 160). El uso directo de px en el código significa que la interfaz se verá diferente en dispositivos con diferentes densidades: en una pantalla con PPI alto el elemento será demasiado pequeño, y en una con PPI bajo — demasiado grande.
Usar px en el código fuente de una aplicación móvil es un antipatrón que provoca una visualización incorrecta de la interfaz en dispositivos con diferente densidad de píxeles. Los frameworks modernos (UIKit, SwiftUI, Jetpack Compose, XML Layouts) prohíben o no recomiendan especificar tamaños en píxeles.
El único uso legítimo de px en el código es trabajar con rasters: cargar Bitmap, crear Canvas para renderizar imágenes, trabajar con Metal o OpenGL. En estos casos, px son los píxeles físicos del búfer de destino y deben tenerse en cuenta para un renderizado correcto. En todos los demás casos, se utilizan unidades lógicas.
Las imágenes e iconos se almacenan en píxeles, pero se suministran diferentes versiones para cada tipo de pantalla. iOS utiliza los sufijos @1x, @2x, @3x en Assets.xcassets. Android utiliza las carpetas drawable-mdpi (1×), drawable-hdpi (1.5×), drawable-xhdpi (2×), drawable-xxhdpi (3×), drawable-xxxhdpi (4×). El sistema selecciona automáticamente el archivo correcto según la densidad de la pantalla.
| Escala iOS | Bucket Android | Factor | Ejemplo (48 pt/dp) |
|---|---|---|---|
| @1x | mdpi (160 dpi) | 1× | 48 × 48 px |
| @2x | xhdpi (320 dpi) | 2× | 96 × 96 px |
| @3x | xxhdpi (480 dpi) | 3× | 144 × 144 px |
| — | xxxhdpi (640 dpi) | 4× | 192 × 192 px |
Regla de entrega de assets: cree la imagen en formato vectorial (PDF, SVG) y expórtela a copias rasterizadas de los tamaños necesarios. Los assets vectoriales se escalan sin pérdida de calidad y ocupan menos espacio en el repositorio. En Android, los recursos vectoriales se pueden usar directamente a través de VectorDrawable, lo que elimina la necesidad de múltiples copias rasterizadas.
Preguntas frecuentes
px — un píxel físico de la pantalla. dp (density-independent pixel) — una unidad lógica de Android igual a 1 px en una pantalla con densidad de 160 dpi. A diferentes densidades, dp se convierte automáticamente en un número diferente de px, conservando el tamaño físico del elemento.
Porque px no tiene en cuenta la densidad de la pantalla. Un elemento de 100 px se verá diferente en dispositivos con diferente PPI: en una pantalla de 326 PPI será más grande que en 460 PPI. Las unidades lógicas (dp, pt, sp) resuelven este problema automáticamente.
PPI (pixels per inch) — el número de píxeles por pulgada de la pantalla. Se calcula mediante la fórmula: PPI = √(w² + h²) / d, donde w y h son la resolución en px, d es la diagonal en pulgadas. Cuanto mayor es el PPI, más nítida es la imagen. La pantalla Retina de Apple comienza en 300 PPI.
px está justificado al trabajar con búferes rasterizados: crear Bitmap, renderizar en Canvas, programar shaders Metal/OpenGL, procesar imágenes de la cámara. En layout y tipografía, px no se utiliza; se aplican pt (iOS), dp y sp (Android).
En iOS: UIScreen.main.nativeBounds devuelve el tamaño en px. En Android: DisplayMetrics.widthPixels y heightPixels de context.resources.displayMetrics. En SwiftUI: GeometryReader devuelve el tamaño en pt, para px hay que multiplicar por displayScale.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también