px — fysieke pixel, het minimale beeldelement op het scherm van een apparaat. In mobiele ontwikkeling wordt px gebruikt als basiseenheid voor schermresolutie en pixeldichtheid (PPI), maar wordt praktisch niet toegepast voor het opmaken van interfaces — in plaats daarvan worden de logische eenheden pt, dp en sp gebruikt. Het artikel legt uit hoe px verschilt van logische eenheden, hoe resolutie en PPI samenhangen, en waarom direct gebruik van px in code een antipatroon is.
Belangrijkste
px (pixel, picture element) — het kleinste adresseerbare element van een rasterafbeelding of display. Elke pixel slaat kleurinformatie op in het RGB-model (rood, groen, blauw) met een kleurdiepte van 8 tot 10 bits per kanaal. Moderne mobiele displays bevatten miljoenen pixels: iPhone 15 Pro — 3 miljoen, iPad Pro 12.9" — 5.6 miljoen pixels.
De fysieke grootte van een pixel hangt af van de displaydichtheid (PPI). Op een apparaat met 326 PPI (iPhone 11) heeft één pixel een grootte van ongeveer 0.078 mm. Op een display met 460 PPI (iPhone 15 Pro) — 0.055 mm. Hoe kleiner de fysieke pixelgrootte, hoe hoger de scherpte van het beeld. Pixeldichtheid heeft direct invloed op de renderprestaties: meer pixels = meer werk voor de GPU.
Volgens Apple is de schermresolutie van de iPhone 15 Pro 1179 × 2556 px bij een dichtheid van 460 PPI. Ter vergelijking, iPhone SE (3rd gen) — 750 × 1334 px bij 326 PPI. Het verschil in totaal aantal pixels is bijna 3 keer, wat de hogere GPU-vereisten op Pro-modellen verklaart.
Schermresolutie — het aantal fysieke pixels horizontaal en verticaal. Wordt genoteerd in het formaat breedte × hoogte, bijvoorbeeld 1179 × 2556 px. Resolutie is een fundamentele eigenschap van het display die niet programmatisch kan worden gewijzigd — het is vastgesteld op hardware- en matrixniveau.
| Apparaat | Resolutie (px) | PPI | Beeldverhouding |
|---|---|---|---|
| iPhone SE (3rd 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 |
Resolutie in pixels moet niet worden verward met de logische schermgrootte (in pt voor iOS of dp voor Android). Bijvoorbeeld, de iPhone 14 heeft een logische grootte van 390 × 844 pt, maar een fysieke resolutie van 1170 × 2532 px — precies 3 keer groter, omdat de schaalfactor 3 is.
PPI (pixels per inch) — het aantal pixels per inch display. Wordt berekend met de formule: PPI = √(breedte² + hoogte²) / diagonaal. Hoe hoger de PPI, hoe fijner de afzonderlijke pixels en hoe vloeiender het beeld oogt. Apple beschouwt een display als Retina wanneer de PPI hoger is dan 300 op een typische kijkafstand.
Verschillende apparaatcategorieën hebben verschillende dichtheden: Apple Watch — 326 PPI, iPhone — 326–460 PPI, iPad — 264 PPI, MacBook Pro — 254–264 PPI. Android-apparaten classificeren dichtheid via Density Buckets: mdpi (160 dpi), hdpi (240), xhdpi (320), xxhdpi (480), xxxhdpi (640). Deze buckets bepalen welke bron (afbeelding, dimens) voor het apparaat wordt geladen.
Invloed van PPI op ontwikkeling: hoe hoger de dichtheid, hoe meer geheugen nodig is voor het opslaan van texturen en afbeeldingen. Een pixel op een display met 500 PPI vereist 2.5 keer meer GPU-geheugen dan op een display met 320 PPI bij dezelfde logische elementgrootte. Optimalisatie van assets voor specifieke dichtheidsbuckets is standaardpraktijk in Android-ontwikkeling.
Fysieke pixels (px) verschillen van logische eenheden (pt, dp, sp) doordat ze zijn gekoppeld aan de hardwarematige resolutie en niet schalen. Logische eenheden daarentegen abstraheren de ontwikkelaar van het specifieke display, waardoor dezelfde waarde van 100 pt met dezelfde fysieke grootte op verschillende apparaten kan worden weergegeven.
| Eenheid | Platform | Afhankelijk van PPI | Schaalt | Waarvoor |
|---|---|---|---|---|
| px | Alle | Ja (fysieke pixel) | Nee | Afbeeldingen, buffers, Metal |
| pt | iOS/macOS | Nee (logisch punt) | scale factor | Layout, UIKit, SwiftUI |
| dp | Android | Nee (density-independent) | density bucket | Layout, elementafmetingen |
| sp | Android | Nee (scale-independent) | density + font scale | Tekst (textSize) |
Omrekenformules: voor iOS — px = pt × scale (waarbij scale = 1, 2 of 3). Voor Android — px = dp × (dpi / 160). Direct gebruik van px in code betekent dat de interface er anders uitziet op apparaten met verschillende dichtheid: op een scherm met hoge PPI zal het element te klein zijn, en op een lage PPI te groot.
Het gebruik van px in de broncode van een mobiele applicatie — een antipatroon dat leidt tot incorrecte weergave van de interface op apparaten met verschillende pixeldichtheid. Moderne frameworks (UIKit, SwiftUI, Jetpack Compose, XML Layouts) verbieden of raden het specificeren van afmetingen in pixels af.
Het enige legitieme gebruik van px in code — werken met rasters: Bitmap laden, Canvas maken voor het renderen van afbeeldingen, werken met Metal of OpenGL. In deze gevallen zijn px — fysieke pixels van de doelbuffer en moeten ze in acht worden genomen voor correcte weergave. In alle andere gevallen worden logische eenheden gebruikt.
Afbeeldingen en pictogrammen worden opgeslagen in pixels, maar voor elk schermtype worden verschillende versies geleverd. iOS gebruikt de achtervoegsels @1x, @2x, @3x in Assets.xcassets. Android gebruikt de mappen drawable-mdpi (1×), drawable-hdpi (1.5×), drawable-xhdpi (2×), drawable-xxhdpi (3×), drawable-xxxhdpi (4×). Het systeem kiest automatisch het juiste bestand op basis van de schermdichtheid.
| iOS scale | Android bucket | Factor | Voorbeeld (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 |
Regel voor het leveren van assets: maak de afbeelding in vectorformaat (PDF, SVG) en exporteer naar rasterkopieën van de gewenste afmetingen. Vectorassets schalen zonder kwaliteitsverlies en nemen minder ruimte in beslag in de repository. In Android kunnen vectorbronnen direct worden gebruikt via VectorDrawable, wat de noodzaak van meerdere rasterkopieën elimineert.
Veelgestelde vragen
px — fysieke pixel van het scherm. dp (density-independent pixel) — logische eenheid van Android, gelijk aan 1 px op een scherm met een dichtheid van 160 dpi. Bij verschillende dichtheden wordt dp automatisch geconverteerd naar een ander aantal px, waarbij de fysieke grootte van het element behouden blijft.
Omdat px geen rekening houdt met de schermdichtheid. Een element van 100 px zal er anders uitzien op apparaten met verschillende PPI: op een scherm van 326 PPI zal het groter zijn dan op 460 PPI. Logische eenheden (dp, pt, sp) lossen dit probleem automatisch op.
PPI (pixels per inch) — het aantal pixels per inch display. Wordt berekend met de formule: PPI = √(w² + h²) / d, waarbij w en h — resolutie in px, d — diagonaal in inches. Hoe hoger de PPI, hoe scherper het beeld. Apple Retina-display begint vanaf 300 PPI.
px is gerechtvaardigd bij het werken met rasterbuffers: Bitmap aanmaken, renderen in Canvas, programmeren van Metal/OpenGL shaders, verwerken van camerabeelden. In layout en typografie wordt px niet gebruikt — pt (iOS), dp en sp (Android) worden toegepast.
In iOS: UIScreen.main.nativeBounds retourneert de grootte in px. In Android: DisplayMetrics.widthPixels en heightPixels uit context.resources.displayMetrics. In SwiftUI: GeometryReader retourneert de grootte in pt, voor px moet worden vermenigvuldigd met displayScale.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook