px — fiziki piksel, cihaz ekranında təsvirin ən kiçik elementi. Mobil inkişafda px ekran təsvir ölçüsü və piksel sıxlığının (PPI) əsas vahidi kimi istifadə olunur, lakin interfeyslərin yığılması üçün praktiki olaraq tətbiq edilmir — onun əvəzinə pt, dp və sp məntiqi vahidləri istifadə olunur. Məqalə px-in məntiqi vahidlərdən nə ilə fərqləndiyini, təsvir ölçüsü və PPI-nin necə əlaqəli olduğunu və kodda birbaşa px istifadəsinin niyə antipattern olduğunu izah edir.
Əsas məqamlar
px (pixel, picture element) — raster təsvirin və ya displeyin ən kiçik ünvanlana bilən elementi. Hər piksel rəng haqqında məlumatı RGB (qırmızı, yaşıl, göy) modelində, kanal başına 8–10 bit rəng dərinliyi ilə saxlayır. Müasir mobil cihaz displeyləri milyonlarla piksel ehtiva edir: iPhone 15 Pro — 3 mln, iPad Pro 12.9" — 5.6 mln piksel.
Pikselin fiziki ölçüsü displey sıxlığından (PPI) asılıdır. 326 PPI (iPhone 11) olan cihazda bir pikselin ölçüsü təxminən 0.078 mm-dir. 460 PPI (iPhone 15 Pro) olan displeydə — 0.055 mm. Pikselin fiziki ölçüsü nə qədər kiçik olsa, təsvirin aydınlığı bir o qədər yüksək olar. Piksel sıxlığı render performansına birbaşa təsir edir: daha çox piksel = GPU üçün daha çox iş.
Apple məlumatlarına görə, iPhone 15 Pro displeyinin təsvir ölçüsü 460 PPI sıxlığında 1179 × 2556 px təşkil edir. Müqayisə üçün, iPhone SE (3rd gen) — 326 PPI-da 750 × 1334 px. Ümumi piksel sayında fərq təxminən 3 dəfədir ki, bu da Pro modellərində GPU-ya daha yüksək tələbləri izah edir.
Ekran təsvir ölçüsü — üfüqi və şaquli fiziki piksellərin sayı. En × hündürlük formatında yazılır, məsələn 1179 × 2556 px. Təsvir ölçüsü displeyin fundamental xarakteristikasıdır, onu proqram yolu ilə dəyişmək mümkün deyil — aparat səviyyəsində və matrisada sabitlənmişdir.
| Cihaz | Təsvir ölçüsü (px) | PPI | Aspekt nisbəti |
|---|---|---|---|
| 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 |
Piksellərdə təsvir ölçüsünü ekranın məntiqi ölçüsü (iOS üçün pt və ya Android üçün dp) ilə qarışdırmaq olmaz. Məsələn, iPhone 14 məntiqi ölçüsü 390 × 844 pt, lakin fiziki təsvir ölçüsü 1170 × 2532 px — düz 3 dəfə böyükdür, çünki scale factor 3-ə bərabərdir.
PPI (pixels per inch) — displeyin bir düymünə düşən piksellərin sayı. Düsturla hesablanır: PPI = √(en² + hündürlük²) / diaqonal. PPI nə qədər yüksək olsa, ayrı-ayrı piksellər bir o qədər kiçik və təsvir bir o qədər hamar olar. Apple Retina displeyini tipik baxış məsafəsində PPI 300-dən yuxarı olan ekran hesab edir.
Müxtəlif cihaz kateqoriyaları müxtəlif sıxlığa malikdir: Apple Watch — 326 PPI, iPhone — 326–460 PPI, iPad — 264 PPI, MacBook Pro — 254–264 PPI. Android cihazları sıxlığı Density Buckets vasitəsilə təsnif edir: mdpi (160 dpi), hdpi (240), xhdpi (320), xxhdpi (480), xxxhdpi (640). Bu vedrələr cihaz üçün hansı resursun (şəkil, dimens) yüklənəcəyini müəyyən edir.
PPI-nin inkişafa təsiri: sıxlıq nə qədər yüksək olsa, tekstur və şəkillərin saxlanması üçün bir o qədər çox yaddaş tələb olunur. 500 PPI olan displeydə piksel, eyni məntiqi element ölçüsündə 320 PPI olan displeyə nisbətən 2.5 dəfə çox GPU yaddaşı tələb edir. Aktivlərin xüsusi sıxlıq vedrələri altında optimallaşdırılması Android inkişafında standart təcrübədir.
Fiziki piksellər (px) məntiqi vahidlərdən (pt, dp, sp) onunla fərqlənir ki, onlar aparat təsvir ölçüsünə bağlıdır və miqyaslanmır. Məntiqi vahidlər isə əksinə, proqramçını konkret displeydən abstraksiya edərək eyni 100 pt dəyərinin müxtəlif cihazlarda eyni fiziki ölçüdə göstərilməsinə imkan verir.
| Vahid | Platforma | PPI-dən asılıdır | Miqyaslanır | Nə üçün |
|---|---|---|---|---|
| px | Hamısı | Bəli (fiziki piksel) | Xeyr | Şəkillər, buferlər, Metal |
| pt | iOS/macOS | Xeyr (məntiqi nöqtə) | scale factor | Layout, UIKit, SwiftUI |
| dp | Android | Xeyr (sıxlıqdan asılı olmayan) | density bucket | Layout, element ölçüləri |
| sp | Android | Xeyr (miqyasdan asılı olmayan) | density + font scale | Mətn (textSize) |
Yenidən hesablama düsturları: iOS üçün — px = pt × scale (scale = 1, 2 və ya 3). Android üçün — px = dp × (dpi / 160). Kodda birbaşa px istifadəsi o deməkdir ki, interfeys müxtəlif sıxlıqlı cihazlarda fərqli görünəcək: yüksək PPI olan ekranda element çox kiçik, aşağı PPI-da isə çox böyük olacaq.
Mobil tətbiqin mənbə kodunda px istifadəsi — antipattern, müxtəlif piksel sıxlığı olan cihazlarda interfeysin düzgün göstərilməməsinə səbəb olur. Müasir freymvorklar (UIKit, SwiftUI, Jetpack Compose, XML Layouts) ölçüləri piksellərdə göstərməyi qadağan edir və ya tövsiyə etmir.
Kodda px-in yeganə qanuni istifadəsi rastrlərlə işdir: Bitmap yükləmə, təsvirlərin renderi üçün Canvas yaratma, Metal və ya OpenGL ilə iş. Bu hallarda px — hədəf buferin fiziki pikselləridir və düzgün render üçün onlar nəzərə alınmalıdır. Bütün digər hallarda məntiqi vahidlər istifadə olunur.
Şəkillər və ikonlar piksellərdə saxlanılır, lakin hər ekran növü üçün müxtəlif versiyalar təqdim olunur. iOS Assets.xcassets-də @1x, @2x, @3x suffikslərindən istifadə edir. Android drawable-mdpi (1×), drawable-hdpi (1.5×), drawable-xhdpi (2×), drawable-xxhdpi (3×), drawable-xxxhdpi (4×) qovluqlarından istifadə edir. Sistem ekran sıxlığına əsasən avtomatik olaraq lazımi faylı seçir.
| iOS scale | Android vedrəsi | Əmsal | Nümunə (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 |
Aktivlərin tədarükü qaydası: təsviri vektor formatında (PDF, SVG) yaradın və tələb olunan ölçülərdə raster nüsxələrə ixrac edin. Vektor aktivləri keyfiyyət itkisi olmadan miqyaslanır və repozitoridə daha az yer tutur. Android-də vektor resursları VectorDrawable vasitəsilə birbaşa istifadə edilə bilər ki, bu da çoxsaylı raster nüsxələrə ehtiyacı aradan qaldırır.
Tez-tez verilən suallar
px — ekranın fiziki pikseli. dp (density-independent pixel) — 160 dpi sıxlığı olan ekranda 1 px-ə bərabər olan Android məntiqi vahidi. Müxtəlif sıxlıqlarda dp avtomatik olaraq müxtəlif sayda px-ə çevrilir, elementin fiziki ölçüsünü qoruyur.
Çünki px ekran sıxlığını nəzərə almır. 100 px ölçüsündə element müxtəlif PPI-lı cihazlarda fərqli görünəcək: 326 PPI ekranda 460 PPI-dan daha böyük olacaq. Məntiqi vahidlər (dp, pt, sp) bu problemi avtomatik həll edir.
PPI (pixels per inch) — displeyin düymündə piksel sayı. Düsturla hesablanır: PPI = √(w² + h²) / d, burada w və h — px ilə təsvir ölçüsü, d — düymlə diaqonal. PPI nə qədər yüksək olsa, təsvir bir o qədər aydındır. Apple Retina displeyi 300 PPI-dan başlayır.
px raster buferlərlə işləyərkən əsaslandırılmışdır: Bitmap yaratma, Canvas-da render, Metal/OpenGL şeyderlərinin proqramlaşdırılması, kamera şəkillərinin işlənməsi. Layout və tipoqrafikada px istifadə edilmir — pt (iOS), dp və sp (Android) tətbiq olunur.
iOS-da: UIScreen.main.nativeBounds px ilə ölçü qaytarır. Android-də: DisplayMetrics.widthPixels və heightPixels context.resources.displayMetrics-dən. SwiftUI-də: GeometryReader pt ilə ölçü qaytarır, px üçün displayScale-ə vurmaq lazımdır.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun