Core Graphics-də rənglə iş iki bir-biri ilə əlaqəli varlıq ətrafında qurulur — CGColor və CGColorSpace. CGColor komponentləri olan konkret rəngi təmsil edir, CGColorSpace isə bu komponentlərin şərh modelini müəyyən edir. Apple Documentation (2026) məlumatına görə, Core Graphics sRGB, Generic Gray və Generic CMYK daxil olmaqla 20-dən çox standart rəng fəzasını dəstəkləyir. CGColor və CGColorSpace arasındakı fərqi anlamaq iOS və macOS-da qrafiklərin düzgün çəkilməsi üçün vacibdir.
Əsas məqamlar
CGColor — Core Graphics-in rəngi təmsil edən fundamental obyektidir. CGColor strukturunda rəng komponentlərinin ədədi dəyərləri və CGColorSpace-ə istinad saxlanılır — bu komponentlərin şərh olunduğu rəng fəzası. Rəng fəzasına bağlanmadan komponentlərin ədədi dəyərləri mənasızdır: (1.0, 0.0, 0.0) dəyəri RGB-də qırmızı, CMYK-də isə mavi (Cyan) deməkdir.
CGColorSpace — rəng modelini və təmsil olunan dəyərlər diapazonunu (gamut) müəyyən edən obyektdir. Rəng fəzası ədədi komponentlərin konkret çıxış cihazında görünən rəngə çevrilmə qaydalarını təyin edir. Core Graphics həm standart ICC profilli fəzaları, həm də CGColorSpace vasitəsilə xüsusi çevirmə cədvəlləri ilə yaradılan fərdi fəzaları dəstəkləyir.
Rəng və rəng fəzasının ayrılması arxitekturası — Core Graphics-in rəngin sadə ədədlər dəsti kimi saxlandığı API-lərdən fərqləndirən əsas xüsusiyyətidir. Bu yanaşma Core Graphics-ə aparatdan müstəqil rəng idarəetməsinə imkan verir: eyni CGColor obyekti CGColorSpace profili vasitəsilə komponentlərin avtomatik çevrilməsi sayəsində müxtəlif ekranlarda düzgün göstərilə bilər.
Core Graphics rəngi ICC profillərinə (International Color Consortium) əsaslanan model vasitəsilə tətbiq edir. Hər CGColorSpace ICC profilinə istinad ehtiva edir — rəng komponentlərinin CIE XYZ-ə (aparatdan müstəqil rəng fəzası) necə çevrildiyinin standartlaşdırılmış təsviri. Bu, Core Graphics-ə müxtəlif ekranlar arasında avtomatik kolorimetrik kompensasiya aparmağa imkan verir.
CGColor CGColorCreate funksiyası vasitəsilə yaradılarkən ötürülən massivdən komponentlərin tutulması və göstərilən CGColorSpace-ə bağlanması baş verir. Core Graphics komponentləri daxili təqdimata köçürür və rəng fəzası ilə assosiasiya yaradır. Bundan sonra rəng istənilən qrafik əməliyyatında istifadəyə hazırdır — doldurma, kontur, gradient, kölgə.
macOS-da rəng idarəetməsi Core Graphics ilə inteqrasiya olunmuş ColorSync freymvorku vasitəsilə həyata keçirilir. ColorSync ekran kalibrlənməsini izləyir və komponentləri mənbə rəng fəzasından hədəf cihazın fəzasına avtomatik çevirir. iOS-da rəng idarəetməsi iPhone 7-dən başlayaraq geniş rəng gamutunu (Display P3) dəstəkləyən Quartz Core vasitəsilə tətbiq olunur.
CGColorSpace dörd əsas rəng modelini dəstəkləyir: RGB (DeviceRGB, sRGB, Display P3), Gray (DeviceGray), CMYK (DeviceCMYK) və Lab. Hər model rəng komponentlərinin sayını və mənasını müəyyən edir. RGB üç kanaldan istifadə edir — qırmızı, yaşıl, mavi; Gray — bir parlaqlıq kanalı; CMYK — çap üçün dörd kanal; Lab — üç kanal: parlaqlıq və iki rəng fərqi komponenti.
| Rəng modeli | Komponentlər | Tətbiq | CGColorSpace növü |
|---|---|---|---|
| RGB | Red, Green, Blue | Ekranlar, iOS/macOS qrafikası | kCGColorSpaceSRGB |
| Gray | White (tək kanal) | Ağ-qara qrafika, kölgələr | kCGColorSpaceGenericGray |
| CMYK | Cyan, Magenta, Yellow, Black | Çap məhsulları, PDF | kCGColorSpaceGenericCMYK |
| Display P3 | R, G, B (geniş gamut) | Müasir iOS cihazları | kCGColorSpaceDisplayP3 |
DeviceRGB — Core Graphics-in ən çox yayılmış standart rəng fəzasıdır. ICC profilləşdirilməsi olmadan standart LCD ekranın rəng gamutundan istifadə edir. UIView və ya NSView qrafik konteksti yaradılarkən, Core Graphics avtomatik olaraq DeviceRGB-ni standart rəng fəzası təyin edir. sRGB — sabit gamut və qamma ilə ICC profilli versiya, veb məzmun üçün tövsiyə olunur.
Display P3 — geniş rəngli displeyləri olan müasir iOS cihazlarında istifadə olunan DCI-P3 standartına əsaslanan rəng fəzasıdır. Spektrin yaşıl və qırmızı sahələrində sRGB-dən təxminən 25% daha çox görünən rəngi əhatə edir. iOS-da Display P3 ilə işləmək üçün iOS 9.3-dən etibarən kCGColorSpaceDisplayP3 sabitindən istifadə olunur.
CGColor CGColorCreate funksiyası vasitəsilə yaradılır, bu funksiya CGColorSpace və CGFloat tipli komponentlər massivi qəbul edir. Komponentlərin sayı rəng modelindən asılıdır: Gray üçün — 1, RGB üçün — 3, CMYK üçün — 4. Yaradıldıqdan sonra CGColor dəyişməz (immutable) obyektdir — onun komponentlərini dəyişmək mümkün deyil, yalnız yeni rəng yaratmaq olar.
Core Graphics həmçinin standart (generic) rəng fəzalarında rənglər yaratmaq üçün CGColorCreateGenericRGB, CGColorCreateGenericGray və CGColorCreateGenericCMYK funksiyalarını təmin edir. Bu funksiyalar kodu sadələşdirərək açıq şəkildə CGColorSpace yaratmaq ehtiyacını aradan qaldırır. Bundan əlavə, Quartz 2D-də əsas rənglərin sabitləri təyin edilmişdir: kCGColorWhite, kCGColorBlack, kCGColorClear.
Rəng yaradılarkən komponentlərin verilmə ardıcıllığı vacibdir — o, rəng fəzasının modeli ilə müəyyən edilmiş kanal ardıcıllığına ciddi şəkildə uyğun olmalıdır. RGB: qırmızı (0.0–1.0), yaşıl, mavi, alfa (0.0–1.0). Gray: parlaqlıq, alfa. CMYK: mavi, magenta, sarı, qara, alfa. Komponentlərin ardıcıllığının pozulması kompilyasiya xətası olmadan rəngin səhv göstərilməsinə səbəb olur.
Alfa kanalı — rəngin şəffaflığını idarə edən dördüncü komponentdir (və ya Gray üçün ikinci). 1.0 dəyəri tam qeyri-şəffaflığa, 0.0 isə tam şəffaflığa uyğundur. CGColor-də alfa kanalı isteğe bağlıdır: CGColorGetAlpha funksiyası cari alfa dəyərini qaytarır, standart olaraq əsas funksiyalar vasitəsilə yaradılarkən 1.0-a bərabərdir. Rənglərin qarışdırılması zamanı Core Graphics Porter-Duff Source Over qaydasına uyğun olaraq alfa kompozitindən istifadə edir.
CGColorSpace Core Graphics-in fabrik funksiyaları vasitəsilə yaradılır: CGColorSpaceCreateDeviceRGB, CGColorSpaceCreateDeviceGray, CGColorSpaceCreateDeviceCMYK və ya adlandırılmış fəzalar (sRGB, Display P3, Generic Gray) üçün CGColorSpaceCreateWithName. CGColorSpace obyekti dəyişməz və thread-safe-dir — eyni obyekt bir neçə qrafik kontekstində istifadə oluna bilər.
Core Graphics adlandırılmış sabitlər vasitəsilə bir neçə əvvəlcədən təyin edilmiş rəng fəzası təmin edir: kCGColorSpaceSRGB, kCGColorSpaceDisplayP3, kCGColorSpaceGenericGrayGamma2_2. Bu sabitlər CGColorSpaceCreateWithName-ə ötürülür. Geniş rəng gamutlu iOS cihazları üçün Display P3-dən istifadə etmək tövsiyə olunur, çünki sRGB displeyin imkanlarından tam istifadə edə bilməz.
ICC profilləri — cihazın rəng xarakteristikalarını təsvir edən standartlaşdırılmış fayllardır. Core Graphics CGColorSpaceCreateWithICCProfile vasitəsilə ixtiyari ICC profili əsasında CGColorSpace yaratmağa imkan verir. Bu, müəyyən printerə və ya monitora dəqiq uyğunluq tələb olunan peşəkar fotoçap və prepress tətbiqlərində istifadə olunur.
Core Graphics CGContextSetFillColorWithColor və ya CGContextSetStrokeColorWithColor funksiyası vasitəsilə çəkmə zamanı rəng fəzaları arasında avtomatik çevirmə aparır. Qrafik kontekstinin rəng fəzası ötürülən CGColor-un rəng fəzasından fərqlidirsə, Quartz 2D hər iki fəzanın ICC profillərindən istifadə edərək konvertasiya aparır.
Açıq rəng çevirməsi üçün CGColorCreateCopyByMatchingToColorSpace istifadə olunur — bu funksiya komponentləri mənbə fəzadan hədəf fəzaya yenidən hesablanmış yeni CGColor yaradır. Apple Technical Note TN2313 (2024) məlumatına görə, Display P3-dən sRGB-yə çevirmə zamanı sRGB gamutundan kənar rənglər kəsilir, bu da doymada itkiyə səbəb olur. Bu xüsusilə parlaq yaşıl və qırmızı çalarlarda nəzərə çarpır.
ColorSync macOS-da qrafik yığını səviyyəsində sistem rəng idarəetməsini təmin edir. Tətbiq açıq rəng fəzası təyin etmirsə, Core Graphics ColorSync-dən əldə edilən displey fəzasından istifadə edir. Bu, müxtəlif monitorlarda, hətta onlar müxtəlif rəng profillərindən istifadə etsələr belə, rənglərin eyni görünməsinə zəmanət verir.
Praktik nümunələri — iOS tətbiqində CGColor və CGColorSpace yaradılması və istifadəsini nəzərdən keçirək. Kod Swift dilində Core Graphics funksiyalarından istifadə etməklə yazılmışdır.
Bu nümunədə üç müxtəlif rəng fəzasında qırmızı rəngin yaradılması göstərilir. Eyni RGB komponentlərinə baxmayaraq, rəng CGColorSpace-in rəng gamutundan asılı olaraq fərqli görünəcək.
import CoreGraphics
// DeviceRGB-də rəng yaradılması
let rgbSpace = CGColorSpaceCreateDeviceRGB()
let redColor = CGColorCreate(rgbSpace, [1.0, 0.0, 0.0, 1.0])
// Display P3-də rəng yaradılması
let p3Space = CGColorSpaceCreateWithName(kCGColorSpaceDisplayP3)
let p3RedColor = CGColorCreate(p3Space, [1.0, 0.0, 0.0, 1.0])
// Boz rəng yaradılması
let graySpace = CGColorSpaceCreateDeviceGray()
let grayColor = CGColorCreate(graySpace, [0.5, 1.0])
Nümunədə parlaq yaşıl rəngin Display P3-dən sRGB-yə konvertasiyası aparılır. Belə çevirmə zamanı sRGB gamutundan kənar rənglər uyğunlaşdırılacaq, bu da tonu dəyişə bilər.
let p3Space = CGColorSpaceCreateWithName(kCGColorSpaceDisplayP3)
let sRGBSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB)
// Display P3-də parlaq yaşıl (sRGB gamutundan kənar)
let p3Green = CGColorCreate(p3Space, [0.0, 1.0, 0.0, 1.0])
// sRGB-yə çevrilmə
let srgbGreen = CGColorCreateCopyByMatchingToColorSpace(
sRGBSpace, p3Green, kCGRenderingIntentDefault
)
Bu nümunə fərdi UIView-da CGColor istifadə edərək doldurulmuş dairənin çəkilməsini göstərir. draw metodu doldurma rənginin təyin olunduğu cari qrafik kontekst UIGraphicsGetCurrentContext-i əldə edir.
class ColorView: UIView {
override func draw(rect: CGRect) {
guard let ctx = UIGraphicsGetCurrentContext()
else { return }
let rgbSpace = CGColorSpaceCreateDeviceRGB()
let blueColor = CGColorCreate(
rgbSpace,
[0.2, 0.4, 1.0, 1.0]
)
ctx.setFillColor(blueColor)
ctx.fillEllipse(in: CGRect(x: 50, y: 50,
width: 200, height: 200))
}
}
Tez-tez verilən suallar
CGColor — C-stili API-də istifadə olunan Core Graphics-dən aşağı səviyyəli rəng təqdimatıdır. UIColor — daxildə CGColor saxlayan və qaranlıq rejimdə (traitCollection) fərqləri dəstəkləyən yüksək səviyyəli UIKit sarğısıdır. UIColor .cgColor xassəsi vasitəsilə CGColor-a çevrilə bilər.
Rəng fəzası ədədi komponentlərin görünən rəng kimi necə şərh olunduğunu müəyyən edir. Eyni ədədlər dəsti (1.0, 0.0, 0.0) RGB-də qırmızı, CMYK-də isə mavi deməkdir. CGColorSpace olmadan Core Graphics rəngi konkret cihazda onun unikal displey xarakteristikaları ilə düzgün göstərə bilməz.
iOS-da UIView qrafik konteksti standart olaraq DeviceRGB rəng fəzası ilə yaradılır. Geniş rəng gamutlu displeyli cihazlarda (iPad Pro 9.7 düym və daha yeniləri, iPhone 7 və daha yeniləri) həmçinin Display P3 mövcuddur ki, bu da standart sRGB-dən 25% daha çox rəngi dəstəkləyir.
Xeyr, CGColor dəyişməz (immutable) obyektdir. Fərqli komponentləri olan rəng əldə etmək üçün CGColorCreate vasitəsilə yeni CGColor yaratmaq lazımdır. Bu, əksər obyektlərin thread-safe və proqnozlaşdırıla bilən çəkmə üçün dəyişməz olduğu Core Graphics dizaynına uyğundur.
Çevirmə üçün hədəf CMYK fəzası ilə CGColorCreateCopyByMatchingToColorSpace istifadə edin. Core Graphics render intentini nəzərə alaraq ICC profilləri vasitəsilə çevirmə aparacaq. Çap üçün kCGRenderingIntentRelativeColorimetric, fotorealistik təsvirlər üçün kCGRenderingIntentPerceptual seçin.
Nəticə
CGColorCreateCopyByMatchingToColorSpace vasitəsilə aparılırAç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