px — un pixel physique, le plus petit élément d'une image sur l'écran d'un appareil. Dans le développement mobile, px est utilisé comme unité de base de la résolution d'écran et de la densité de pixels (PPI), mais n'est pratiquement jamais utilisé pour la mise en page des interfaces — à la place, les unités logiques pt, dp et sp sont utilisées. Cet article explique en quoi px diffère des unités logiques, comment la résolution et le PPI sont liés, et pourquoi utiliser px directement dans le code est un anti-modèle.
Points clés
px (pixel, picture element) — le plus petit élément adressable d'une image raster ou d'un affichage. Chaque pixel stocke des informations de couleur dans le modèle RVB (rouge, vert, bleu) avec une profondeur de couleur de 8 à 10 bits par canal. Les écrans des appareils mobiles modernes contiennent des millions de pixels : iPhone 15 Pro — 3 millions, iPad Pro 12,9" — 5,6 millions de pixels.
La taille physique d'un pixel dépend de la densité de l'affichage (PPI). Sur un appareil avec 326 PPI (iPhone 11), un pixel mesure environ 0,078 mm. Sur un écran avec 460 PPI (iPhone 15 Pro) — 0,055 mm. Plus la taille physique du pixel est petite, plus la netteté de l'image est élevée. Dans le même temps, la densité de pixels affecte directement les performances de rendu : plus de pixels = plus de travail pour le GPU.
Selon Apple, la résolution de l'écran de l'iPhone 15 Pro est de 1179 × 2556 px à 460 PPI. À titre de comparaison, l'iPhone SE (3e génération) — 750 × 1334 px à 326 PPI. La différence du nombre total de pixels est de près de 3 fois, ce qui explique les exigences GPU plus élevées sur les modèles Pro.
Résolution d'écran — le nombre de pixels physiques horizontalement et verticalement. Elle s'écrit au format largeur × hauteur, par exemple 1179 × 2556 px. La résolution est une caractéristique fondamentale de l'affichage qui ne peut pas être modifiée par programmation — elle est fixée au niveau du matériel et de la matrice.
| Appareil | Résolution (px) | PPI | Format d'image |
|---|---|---|---|
| iPhone SE (3e gén.) | 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 résolution en pixels ne doit pas être confondue avec la taille logique de l'écran (en pt pour iOS ou dp pour Android). Par exemple, l'iPhone 14 a une taille logique de 390 × 844 pt, mais une résolution physique de 1170 × 2532 px — exactement 3 fois plus grande, car le facteur d'échelle est de 3.
PPI (pixels par pouce) — le nombre de pixels par pouce de l'affichage. Calculé par la formule : PPI = √(largeur² + hauteur²) / diagonale. Plus le PPI est élevé, plus les pixels individuels sont petits et plus l'image paraît lisse. Apple considère qu'un écran Retina a un PPI supérieur à 300 à une distance de visualisation typique.
Différentes catégories d'appareils ont différentes densités : Apple Watch — 326 PPI, iPhone — 326–460 PPI, iPad — 264 PPI, MacBook Pro — 254–264 PPI. Les appareils Android classent la densité via des Density Buckets : mdpi (160 dpi), hdpi (240), xhdpi (320), xxhdpi (480), xxxhdpi (640). Ces buckets déterminent quelle ressource (image, dimens) sera chargée pour l'appareil.
Impact du PPI sur le développement : plus la densité est élevée, plus la mémoire nécessaire pour stocker les textures et les images est importante. Un pixel sur un écran 500 PPI nécessite 2,5 fois plus de mémoire GPU qu'un écran 320 PPI pour la même taille d'élément logique. L'optimisation des assets pour des buckets de densité spécifiques est une pratique standard dans le développement Android.
Les pixels physiques (px) diffèrent des unités logiques (pt, dp, sp) car ils sont liés à la résolution matérielle et ne sont pas mis à l'échelle. Les unités logiques, au contraire, abstraient le développeur de l'écran spécifique, permettant à une seule valeur de 100 pt de s'afficher avec la même taille physique sur différents appareils.
| Unité | Plateforme | Dépend du PPI | Échelle | Objectif |
|---|---|---|---|---|
| px | Toutes | Oui (pixel physique) | Non | Images, tampons, Metal |
| pt | iOS/macOS | Non (point logique) | facteur d'échelle | Layout, UIKit, SwiftUI |
| dp | Android | Non (indép. densité) | bucket de densité | Layout, tailles d'éléments |
| sp | Android | Non (indép. échelle) | densité + échelle police | Texte (textSize) |
Formules de conversion : pour iOS — px = pt × scale (où scale = 1, 2 ou 3). Pour Android — px = dp × (dpi / 160). L'utilisation directe de px dans le code signifie que l'interface aura un aspect différent sur des appareils de densités différentes : sur un écran à PPI élevé, l'élément sera trop petit, et sur un PPI faible — trop grand.
Utiliser px dans le code source d'une application mobile est un anti-modèle qui conduit à un affichage incorrect de l'interface sur des appareils avec différentes densités de pixels. Les frameworks modernes (UIKit, SwiftUI, Jetpack Compose, XML Layouts) interdisent ou ne recommandent pas de spécifier les tailles en pixels.
La seule utilisation légitime de px dans le code est le travail avec les rasters : chargement de Bitmap, création de Canvas pour le rendu d'images, travail avec Metal ou OpenGL. Dans ces cas, px sont les pixels physiques du tampon cible et doivent être pris en compte pour un rendu correct. Dans tous les autres cas, des unités logiques sont utilisées.
Les images et icônes sont stockées en pixels, mais différentes versions sont fournies pour chaque type d'écran. iOS utilise les suffixes @1x, @2x, @3x dans Assets.xcassets. Android utilise les dossiers drawable-mdpi (1×), drawable-hdpi (1,5×), drawable-xhdpi (2×), drawable-xxhdpi (3×), drawable-xxxhdpi (4×). Le système sélectionne automatiquement le fichier correct en fonction de la densité de l'écran.
| Échelle iOS | Bucket Android | Facteur | Exemple (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 |
Règle de livraison des assets : créez l'image au format vectoriel (PDF, SVG) et exportez-la en copies raster des tailles nécessaires. Les assets vectoriels se mettent à l'échelle sans perte de qualité et prennent moins de place dans le référentiel. Sous Android, les ressources vectorielles peuvent être utilisées directement via VectorDrawable, éliminant ainsi le besoin de multiples copies raster.
Questions fréquentes
px — un pixel physique de l'écran. dp (density-independent pixel) — une unité logique Android égale à 1 px sur un écran avec une densité de 160 dpi. À différentes densités, dp se convertit automatiquement en un nombre différent de px, préservant la taille physique de l'élément.
Parce que px ne tient pas compte de la densité de l'écran. Un élément de 100 px aura un aspect différent sur des appareils avec un PPI différent : sur un écran 326 PPI, il sera plus grand que sur 460 PPI. Les unités logiques (dp, pt, sp) résolvent ce problème automatiquement.
PPI (pixels par pouce) — le nombre de pixels par pouce de l'affichage. Calculé par la formule : PPI = √(l² + h²) / d, où l et h sont la résolution en px, d est la diagonale en pouces. Plus le PPI est élevé, plus l'image est nette. L'écran Retina d'Apple commence à 300 PPI.
px est justifié lors du travail avec des tampons raster : création de Bitmap, rendu dans Canvas, programmation de shaders Metal/OpenGL, traitement d'images de la caméra. Dans la mise en page et la typographie, px n'est pas utilisé — pt (iOS), dp et sp (Android) sont appliqués.
Sous iOS : UIScreen.main.nativeBounds retourne la taille en px. Sous Android : DisplayMetrics.widthPixels et heightPixels depuis context.resources.displayMetrics. Sous SwiftUI : GeometryReader retourne la taille en pt, pour px il faut multiplier par displayScale.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi