px — ein physisches Pixel, das kleinste Element eines Bildes auf einem Gerätebildschirm. In der Mobilentwicklung wird px als Basiseinheit für Bildschirmauflösung und Pixeldichte (PPI) verwendet, aber praktisch nie für das Interface-Layout eingesetzt — stattdessen werden die logischen Einheiten pt, dp und sp verwendet. Dieser Artikel erklärt, wie sich px von logischen Einheiten unterscheidet, wie Auflösung und PPI zusammenhängen und warum die direkte Verwendung von px im Code ein Antipattern ist.
Wichtige Punkte
px (Pixel, Bildelement) — das kleinste adressierbare Element eines Rasterbildes oder Displays. Jedes Pixel speichert Farbinformationen im RGB-Modell (Rot, Grün, Blau) mit einer Farbtiefe von 8 bis 10 Bit pro Kanal. Moderne Mobilgerätedisplays enthalten Millionen von Pixeln: iPhone 15 Pro — 3 Millionen, iPad Pro 12.9" — 5,6 Millionen Pixel.
Die physische Größe eines Pixels hängt von der Displaydichte (PPI) ab. Auf einem Gerät mit 326 PPI (iPhone 11) beträgt ein Pixel etwa 0,078 mm. Auf einem Display mit 460 PPI (iPhone 15 Pro) — 0,055 mm. Je kleiner die physische Pixelgröße, desto höher die Schärfe des Bildes. Gleichzeitig wirkt sich die Pixeldichte direkt auf die Renderleistung aus: mehr Pixel = mehr Arbeit für die GPU.
Laut Apple beträgt die Displayauflösung des iPhone 15 Pro 1179 × 2556 px bei 460 PPI. Zum Vergleich: iPhone SE (3. Generation) — 750 × 1334 px bei 326 PPI. Der Unterschied in der Gesamtpixelanzahl beträgt fast das Dreifache, was die höheren GPU-Anforderungen bei Pro-Modellen erklärt.
Bildschirmauflösung — die Anzahl der physischen Pixel horizontal und vertikal. Sie wird im Format Breite × Höhe geschrieben, z. B. 1179 × 2556 px. Die Auflösung ist eine grundlegende Eigenschaft des Displays, die nicht programmatisch geändert werden kann — sie ist auf Hardware- und Matrixebene festgelegt.
| Gerät | Auflösung (px) | PPI | Seitenverhältnis |
|---|---|---|---|
| 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 |
Die Auflösung in Pixeln sollte nicht mit der logischen Bildschirmgröße (in pt für iOS oder dp für Android) verwechselt werden. Beispielsweise hat das iPhone 14 eine logische Größe von 390 × 844 pt, aber eine physische Auflösung von 1170 × 2532 px — genau 3-mal größer, da der Skalierungsfaktor 3 beträgt.
PPI (Pixel pro Zoll) — die Anzahl der Pixel pro Zoll des Displays. Berechnet nach der Formel: PPI = √(Breite² + Höhe²) / Diagonale. Je höher der PPI, desto kleiner sind die einzelnen Pixel und desto glatter erscheint das Bild. Apple betrachtet ein Display mit einem PPI über 300 bei typischem Betrachtungsabstand als Retina-Display.
Verschiedene Gerätekategorien haben unterschiedliche Dichten: Apple Watch — 326 PPI, iPhone — 326–460 PPI, iPad — 264 PPI, MacBook Pro — 254–264 PPI. Android-Geräte klassifizieren die Dichte über Density Buckets: mdpi (160 dpi), hdpi (240), xhdpi (320), xxhdpi (480), xxxhdpi (640). Diese Buckets bestimmen, welche Ressource (Bild, dimens) für das Gerät geladen wird.
Auswirkung von PPI auf die Entwicklung: Je höher die Dichte, desto mehr Speicher wird für Texturen und Bilder benötigt. Ein Pixel auf einem 500 PPI-Display benötigt 2,5-mal mehr GPU-Speicher als auf einem 320 PPI-Display bei gleicher logischer Elementgröße. Die Optimierung von Assets für bestimmte Dichte-Buckets ist eine Standardpraxis in der Android-Entwicklung.
Physische Pixel (px) unterscheiden sich von logischen Einheiten (pt, dp, sp) dadurch, dass sie an die Hardwareauflösung gebunden sind und nicht skaliert werden. Logische Einheiten hingegen abstrahieren den Entwickler vom spezifischen Display und ermöglichen es, dass ein einzelner Wert von 100 pt auf verschiedenen Geräten mit derselben physischen Größe angezeigt wird.
| Einheit | Plattform | Abhängig von PPI | Skaliert | Zweck |
|---|---|---|---|---|
| px | Alle | Ja (physisches Pixel) | Nein | Bilder, Puffer, Metal |
| pt | iOS/macOS | Nein (logischer Punkt) | Skalierungsfaktor | Layout, UIKit, SwiftUI |
| dp | Android | Nein (dichteunabhängig) | Dichte-Bucket | Layout, Elementgrößen |
| sp | Android | Nein (skalenunabhängig) | Dichte + Schrift-Skalierung | Text (textSize) |
Umrechnungsformeln: für iOS — px = pt × scale (wobei scale = 1, 2 oder 3). Für Android — px = dp × (dpi / 160). Die direkte Verwendung von px im Code bedeutet, dass die Oberfläche auf Geräten mit unterschiedlicher Dichte anders aussieht: auf einem Bildschirm mit hohem PPI ist das Element zu klein, bei niedrigem PPI — zu groß.
Die Verwendung von px im Quellcode einer mobilen Anwendung ist ein Antipattern, das zu einer falschen Anzeige der Oberfläche auf Geräten mit unterschiedlicher Pixeldichte führt. Moderne Frameworks (UIKit, SwiftUI, Jetpack Compose, XML Layouts) verbieten oder empfehlen nicht, Größen in Pixeln anzugeben.
Die einzig legitime Verwendung von px im Code ist die Arbeit mit Rastern: Laden von Bitmap, Erstellen von Canvas zum Rendern von Bildern, Arbeiten mit Metal oder OpenGL. In diesen Fällen sind px die physischen Pixel des Zielpuffers und müssen für korrektes Rendering berücksichtigt werden. In allen anderen Fällen werden logische Einheiten verwendet.
Bilder und Symbole werden in Pixeln gespeichert, aber für jeden Bildschirmtyp werden verschiedene Versionen bereitgestellt. iOS verwendet die Suffixe @1x, @2x, @3x in Assets.xcassets. Android verwendet die Ordner drawable-mdpi (1×), drawable-hdpi (1.5×), drawable-xhdpi (2×), drawable-xxhdpi (3×), drawable-xxxhdpi (4×). Das System wählt automatisch die richtige Datei basierend auf der Bildschirmdichte aus.
| iOS-Skalierung | Android-Bucket | Faktor | Beispiel (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 |
Asset-Bereitstellungsregel: Erstellen Sie das Bild im Vektorformat (PDF, SVG) und exportieren Sie es in Rasterkopien der erforderlichen Größen. Vektor-Assets skalieren ohne Qualitätsverlust und benötigen weniger Platz im Repository. In Android können Vektorressourcen direkt über VectorDrawable verwendet werden, wodurch mehrere Rasterkopien überflüssig werden.
Häufig gestellte Fragen
px — ein physisches Bildschirm-Pixel. dp (dichteunabhängiges Pixel) — eine logische Android-Einheit, die 1 px auf einem Bildschirm mit 160 dpi Dichte entspricht. Bei unterschiedlichen Dichten konvertiert dp automatisch in eine unterschiedliche Anzahl von px und bewahrt so die physische Größe des Elements.
Weil px die Bildschirmdichte nicht berücksichtigt. Ein 100 px-Element sieht auf Geräten mit unterschiedlichem PPI anders aus: auf einem 326 PPI-Bildschirm ist es größer als auf 460 PPI. Logische Einheiten (dp, pt, sp) lösen dieses Problem automatisch.
PPI (Pixel pro Zoll) — die Anzahl der Pixel pro Zoll des Displays. Berechnet nach der Formel: PPI = √(w² + h²) / d, wobei w und h die Auflösung in px sind, d die Diagonale in Zoll. Je höher der PPI, desto schärfer das Bild. Apple Retina-Display beginnt bei 300 PPI.
px ist bei der Arbeit mit Rasterpuffern gerechtfertigt: Erstellen von Bitmap, Rendern in Canvas, Programmieren von Metal/OpenGL-Shadern, Verarbeiten von Kamerabildern. Im Layout und in der Typografie wird px nicht verwendet — pt (iOS), dp und sp (Android) werden angewendet.
In iOS: UIScreen.main.nativeBounds gibt die Größe in px zurück. In Android: DisplayMetrics.widthPixels und heightPixels aus context.resources.displayMetrics. In SwiftUI: GeometryReader gibt die Größe in pt zurück, für px muss mit displayScale multipliziert werden.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch