px — φυσικό εικονοστοιχείο (pixel), το μικρότερο στοιχείο εικόνας στην οθόνη μιας συσκευής. Στην ανάπτυξη εφαρμογών για κινητά, το px χρησιμοποιείται ως βασική μονάδα ανάλυσης οθόνης και πυκνότητας εικονοστοιχείων (PPI), αλλά πρακτικά δεν εφαρμόζεται για τη διάταξη διεπαφών — αντί αυτού χρησιμοποιούνται οι λογικές μονάδες pt, dp και sp. Το άρθρο εξηγεί σε τι διαφέρει το px από τις λογικές μονάδες, πώς συνδέονται η ανάλυση και το PPI και γιατί η άμεση χρήση του px στον κώδικα είναι αντ-πρότυπο.
Κύρια σημεία
px (pixel, picture element) — το μικρότερο προσβάσιμο στοιχείο μιας ψηφιδωτής εικόνας ή οθόνης. Κάθε εικονοστοιχείο αποθηκεύει πληροφορίες χρώματος στο μοντέλο RGB (κόκκινο, πράσινο, μπλε) με βάθος χρώματος 8 έως 10 bit ανά κανάλι. Οι σύγχρονες οθόνες κινητών συσκευών περιέχουν εκατομμύρια εικονοστοιχεία: iPhone 15 Pro — 3 εκατομμύρια, iPad Pro 12.9" — 5.6 εκατομμύρια εικονοστοιχεία.
Το φυσικό μέγεθος του εικονοστοιχείου εξαρτάται από την πυκνότητα οθόνης (PPI). Σε μια συσκευή με 326 PPI (iPhone 11) ένα εικονοστοιχείο έχει μέγεθος περίπου 0.078 mm. Σε οθόνη με 460 PPI (iPhone 15 Pro) — 0.055 mm. Όσο μικρότερο είναι το φυσικό μέγεθος του εικονοστοιχείου, τόσο μεγαλύτερη είναι η ευκρίνεια της εικόνας. Η πυκνότητα εικονοστοιχείων επηρεάζει άμεσα την απόδοση απόδοσης: περισσότερα εικονοστοιχεία = περισσότερη δουλειά για την GPU.
Σύμφωνα με στοιχεία της Apple, η ανάλυση οθόνης του iPhone 15 Pro είναι 1179 × 2556 px με πυκνότητα 460 PPI. Για σύγκριση, το iPhone SE (3rd gen) — 750 × 1334 px με 326 PPI. Η διαφορά στον συνολικό αριθμό εικονοστοιχείων είναι σχεδόν 3 φορές, γεγονός που εξηγεί τις υψηλότερες απαιτήσεις GPU στα μοντέλα Pro.
Ανάλυση οθόνης — αριθμός φυσικών εικονοστοιχείων οριζόντια και κάθετα. Γράφεται σε μορφή πλάτος × ύψος, π.χ. 1179 × 2556 px. Η ανάλυση είναι ένα θεμελιώδες χαρακτηριστικό της οθόνης που δεν μπορεί να αλλάξει προγραμματιστικά — είναι σταθερό σε επίπεδο υλικού και μήτρας.
| Συσκευή | Ανάλυση (px) | PPI | Αναλογία διαστάσεων |
|---|---|---|---|
| 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 |
Η ανάλυση σε εικονοστοιχεία δεν πρέπει να συγχέεται με το λογικό μέγεθος οθόνης (σε pt για iOS ή dp για Android). Για παράδειγμα, το iPhone 14 έχει λογικό μέγεθος 390 × 844 pt, αλλά φυσική ανάλυση 1170 × 2532 px — ακριβώς 3 φορές μεγαλύτερη, καθώς ο συντελεστής κλίμακας είναι 3.
PPI (pixels per inch) — αριθμός εικονοστοιχείων ανά ίντσα οθόνης. Υπολογίζεται με τον τύπο: PPI = √(πλάτος² + ύψος²) / διαγώνιος. Όσο υψηλότερο είναι το PPI, τόσο πιο λεπτά είναι τα μεμονωμένα εικονοστοιχεία και τόσο πιο λεία φαίνεται η εικόνα. Η Apple θεωρεί Retina οθόνη εκείνη με PPI άνω των 300 σε τυπική απόσταση παρακολούθησης.
Διαφορετικές κατηγορίες συσκευών έχουν διαφορετική πυκνότητα: Apple Watch — 326 PPI, iPhone — 326–460 PPI, iPad — 264 PPI, MacBook Pro — 254–264 PPI. Οι συσκευές Android ταξινομούν την πυκνότητα μέσω Density Buckets: mdpi (160 dpi), hdpi (240), xhdpi (320), xxhdpi (480), xxxhdpi (640). Αυτοί οι κάδοι καθορίζουν ποιος πόρος (εικόνα, dimens) θα φορτωθεί για τη συσκευή.
Επίδραση του PPI στην ανάπτυξη: όσο μεγαλύτερη είναι η πυκνότητα, τόσο περισσότερη μνήμη απαιτείται για την αποθήκευση υφών και εικόνων. Ένα εικονοστοιχείο σε οθόνη με 500 PPI απαιτεί 2.5 φορές περισσότερη μνήμη GPU από ό,τι σε οθόνη με 320 PPI στο ίδιο λογικό μέγεθος στοιχείου. Η βελτιστοποίηση στοιχείων για συγκεκριμένους κάδους πυκνότητας είναι συνήθης πρακτική στην ανάπτυξη Android.
Τα φυσικά εικονοστοιχεία (px) διαφέρουν από τις λογικές μονάδες (pt, dp, sp) στο ότι είναι συνδεδεμένα με την ανάλυση υλικού και δεν κλιμακώνονται. Οι λογικές μονάδες, αντίθετα, αφαιρούν τον προγραμματιστή από τη συγκεκριμένη οθόνη, επιτρέποντας στην ίδια τιμή 100 pt να εμφανίζεται με το ίδιο φυσικό μέγεθος σε διαφορετικές συσκευές.
| Μονάδα | Πλατφόρμα | Εξαρτάται από PPI | Κλιμακώνεται | Για τι |
|---|---|---|---|---|
| px | Όλες | Ναι (φυσικό εικονοστοιχείο) | Όχι | Εικόνες, ενδιάμεσοι αποθήκευσης, Metal |
| pt | iOS/macOS | Όχι (λογικό σημείο) | scale factor | Layout, UIKit, SwiftUI |
| dp | Android | Όχι (ανεξάρτητο πυκνότητας) | density bucket | Layout, μεγέθη στοιχείων |
| sp | Android | Όχι (ανεξάρτητο κλίμακας) | density + font scale | Κείμενο (textSize) |
Τύποι μετατροπής: για iOS — px = pt × scale (όπου scale = 1, 2 ή 3). Για Android — px = dp × (dpi / 160). Η άμεση χρήση του px στον κώδικα σημαίνει ότι η διεπαφή θα φαίνεται διαφορετική σε συσκευές με διαφορετική πυκνότητα: σε οθόνη με υψηλό PPI το στοιχείο θα είναι πολύ μικρό, ενώ σε χαμηλό PPI — πολύ μεγάλο.
Η χρήση px στον πηγαίο κώδικα μιας εφαρμογής κινητού — αντ-πρότυπο που οδηγεί σε εσφαλμένη εμφάνιση της διεπαφής σε συσκευές με διαφορετική πυκνότητα εικονοστοιχείων. Τα σύγχρονα πλαίσια (UIKit, SwiftUI, Jetpack Compose, XML Layouts) απαγορεύουν ή δεν συνιστούν τον καθορισμό μεγεθών σε εικονοστοιχεία.
Η μόνη νόμιμη χρήση του px στον κώδικα — εργασία με ψηφιδωτούς ενδιάμεσους αποθήκευσης: φόρτωση Bitmap, δημιουργία Canvas για απόδοση εικόνων, εργασία με Metal ή OpenGL. Σε αυτές τις περιπτώσεις, το px είναι τα φυσικά εικονοστοιχεία του ενδιάμεσου αποθήκευσης-στόχου και πρέπει να λαμβάνονται υπόψη για σωστή απόδοση. Σε όλες τις άλλες περιπτώσεις χρησιμοποιούνται λογικές μονάδες.
Οι εικόνες και τα εικονίδια αποθηκεύονται σε εικονοστοιχεία, αλλά για κάθε τύπο οθόνης παρέχονται διαφορετικές εκδόσεις. Το iOS χρησιμοποιεί επιθήματα @1x, @2x, @3x στο Assets.xcassets. Το Android χρησιμοποιεί φακέλους drawable-mdpi (1×), drawable-hdpi (1.5×), drawable-xhdpi (2×), drawable-xxhdpi (3×), drawable-xxxhdpi (4×). Το σύστημα επιλέγει αυτόματα το κατάλληλο αρχείο βάσει της πυκνότητας οθόνης.
| iOS scale | Android κάδος | Συντελεστής | Παράδειγμα (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 |
Κανόνας παροχής στοιχείων: δημιουργήστε την εικόνα σε διανυσματική μορφή (PDF, SVG) και εξάγετε σε ψηφιδωτά αντίγραφα των απαιτούμενων μεγεθών. Τα διανυσματικά στοιχεία κλιμακώνονται χωρίς απώλεια ποιότητας και καταλαμβάνουν λιγότερο χώρο στο αποθετήριο. Στο Android, οι διανυσματικοί πόροι μπορούν να χρησιμοποιηθούν απευθείας μέσω VectorDrawable, εξαλείφοντας την ανάγκη για πολλαπλά ψηφιδωτά αντίγραφα.
Συχνές Ερωτήσεις
px — φυσικό εικονοστοιχείο οθόνης. dp (density-independent pixel) — λογική μονάδα Android, ίση με 1 px σε οθόνη με πυκνότητα 160 dpi. Σε διαφορετικές πυκνότητες, το dp μετατρέπεται αυτόματα σε διαφορετικό αριθμό px, διατηρώντας το φυσικό μέγεθος του στοιχείου.
Επειδή το px δεν λαμβάνει υπόψη την πυκνότητα οθόνης. Ένα στοιχείο μεγέθους 100 px θα φαίνεται διαφορετικό σε συσκευές με διαφορετικό PPI: σε οθόνη 326 PPI θα είναι μεγαλύτερο από ό,τι σε 460 PPI. Οι λογικές μονάδες (dp, pt, sp) λύνουν αυτό το πρόβλημα αυτόματα.
PPI (pixels per inch) — αριθμός εικονοστοιχείων ανά ίντσα οθόνης. Υπολογίζεται με τον τύπο: PPI = √(w² + h²) / d, όπου w και h — ανάλυση σε px, d — διαγώνιος σε ίντσες. Όσο υψηλότερο είναι το PPI, τόσο πιο ευκρινής είναι η εικόνα. Η Retina οθόνη της Apple ξεκινά από 300 PPI.
px δικαιολογείται κατά την εργασία με ψηφιδωτούς ενδιάμεσους αποθήκευσης: δημιουργία Bitmap, απόδοση σε Canvas, προγραμματισμός shader Metal/OpenGL, επεξεργασία εικόνων κάμερας. Σε διάταξη και τυπογραφία το px δεν χρησιμοποιείται — εφαρμόζονται pt (iOS), dp και sp (Android).
Σε iOS: UIScreen.main.nativeBounds επιστρέφει μέγεθος σε px. Σε Android: DisplayMetrics.widthPixels και heightPixels από context.resources.displayMetrics. Σε SwiftUI: GeometryReader επιστρέφει μέγεθος σε pt, για px πρέπει να πολλαπλασιαστεί με displayScale.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης