Core Graphics da rang bilan ishlash ikkita o'zaro bog'liq ob'ekt atrofida qurilgan — CGColor va CGColorSpace. CGColor komponentlar bilan aniq rangni ifodalaydi, CGColorSpace esa ushbu komponentlarni talqin qilish modelini belgilaydi. Apple Documentation (2026) ma'lumotlariga ko'ra, Core Graphics sRGB, Generic Gray va Generic CMYK ni o'z ichiga olgan 20 dan ortiq standart rang fazolarini qo'llab-quvvatlaydi. CGColor va CGColorSpace o'rtasidagi farqni tushunish iOS va macOS da grafikalarni to'g'ri chizish uchun zarurdir.
Asosiy fikrlar
CGColor — bu Core Graphics ning rangni ifodalovchi fundamental ob'ekti. CGColor tarkibida rang komponentlarining raqamli qiymatlari va CGColorSpace ga havola saqlanadi — bu komponentlar talqin qilinadigan rang fazosi. Rang fazosiga bog'lanmasdan, komponentlarning raqamli qiymatlari ma'noga ega emas: (1.0, 0.0, 0.0) qiymati RGB da qizil, CMYK da esa moviy (Cyan) rangdir.
CGColorSpace — rang modelini va ifodalanishi mumkin bo'lgan qiymatlar diapazonini (gamut) belgilaydigan ob'ekt. Rang fazosi raqamli komponentlarning aniq chiqish qurilmasida ko'rinadigan rangga aylanish qoidalarini belgilaydi. Core Graphics ham standart ICC profilli fazolarni, ham CGColorSpace orqali maxsus konvertatsiya jadvallari bilan yaratilgan shaxsiy fazolarni qo'llab-quvvatlaydi.
Rang va rang fazosini ajratish arxitekturasi — Core Graphics ni rang oddiy raqamlar to'plami sifatida saqlanadigan API lardan ajratib turadigan asosiy xususiyatdir. Bunday yondashuv Core Graphics ga apparatdan mustaqil rang boshqaruvini amalga oshirishga imkon beradi: bir xil CGColor ob'ekti CGColorSpace profili orqali komponentlarning avtomatik konvertatsiyasi tufayli turli ekranlarda to'g'ri ko'rsatilishi mumkin.
Core Graphics rangni ICC profillariga (International Color Consortium) asoslangan model orqali amalga oshiradi. Har bir CGColorSpace ICC profiliga havolani o'z ichiga oladi — rang komponentlarining CIE XYZ ga (apparatdan mustaqil rang fazosi) qanday aylanishining standartlashtirilgan tavsifi. Bu Core Graphics ga turli ekranlar orasida avtomatik kolorimetrik kompensatsiyani amalga oshirishga imkon beradi.
CGColor CGColorCreate funksiyasi orqali yaratilganda, uzatilgan massivdan komponentlarni olish va ko'rsatilgan CGColorSpace ga bog'lash sodir bo'ladi. Core Graphics komponentlarni ichki ko'rinishga nusxalaydi va rang fazosi bilan assotsiatsiya yaratadi. Shundan so'ng rang har qanday grafik operatsiyada foydalanishga tayyor — to'ldirish, kontur, gradient, soya.
macOS da rang boshqaruvi Core Graphics bilan integratsiyalangan ColorSync freymvorki orqali amalga oshiriladi. ColorSync ekran kalibratsiyasini kuzatadi va komponentlarni manba rang fazosidan maqsadli qurilma fazosiga avtomatik ravishda o'zgartiradi. iOS da rang boshqaruvi iPhone 7 dan boshlab keng rang gamutini (Display P3) qo'llab-quvvatlaydigan Quartz Core orqali amalga oshiriladi.
CGColorSpace to'rtta asosiy rang modelini qo'llab-quvvatlaydi: RGB (DeviceRGB, sRGB, Display P3), Gray (DeviceGray), CMYK (DeviceCMYK) va Lab. Har bir model rang komponentlarining soni va ma'nosini belgilaydi. RGB uchta kanaldan foydalanadi — qizil, yashil, ko'k; Gray — bitta yorqinlik kanali; CMYK — chop etish uchun to'rtta kanal; Lab — uchta kanal: yorqinlik va ikkita rang farqi komponenti.
| Rang modeli | Komponentlar | Qo'llanilishi | CGColorSpace turi |
|---|---|---|---|
| RGB | Red, Green, Blue | Ekranlar, iOS/macOS grafikasi | kCGColorSpaceSRGB |
| Gray | White (bitta kanal) | Oq-qora grafika, soyalar | kCGColorSpaceGenericGray |
| CMYK | Cyan, Magenta, Yellow, Black | Chop mahsulotlari, PDF | kCGColorSpaceGenericCMYK |
| Display P3 | R, G, B (keng gamut) | Zamonaviy iOS qurilmalari | kCGColorSpaceDisplayP3 |
DeviceRGB — Core Graphics ning eng keng tarqalgan standart rang fazosidir. U ICC profilisiz standart LCD ekranning rang gamutidan foydalanadi. UIView yoki NSView grafik konteksti yaratilganda, Core Graphics avtomatik ravishda DeviceRGB ni standart rang fazosi sifatida tayinlaydi. sRGB — qattiq gamut va gamma bilan ICC profilli versiya, veb-kontent uchun tavsiya etiladi.
Display P3 — keng rangli displeylarga ega zamonaviy iOS qurilmalarida ishlatiladigan DCI-P3 standartiga asoslangan rang fazosi. Spektrning yashil va qizil sohalarida sRGB dan taxminan 25% ko'proq ko'rinadigan ranglarni qamrab oladi. iOS da Display P3 bilan ishlash uchun iOS 9.3 dan boshlab kCGColorSpaceDisplayP3 konstantasidan foydalaniladi.
CGColor CGColorCreate funksiyasi orqali yaratiladi, u CGColorSpace va CGFloat turidagi komponentlar massivini qabul qiladi. Komponentlar soni rang modeliga bog'liq: Gray uchun — 1, RGB uchun — 3, CMYK uchun — 4. Yaratilgandan so'ng, CGColor o'zgarmas (immutable) ob'ektdir — uning komponentlarini o'zgartirish mumkin emas, faqat yangi rang yaratish mumkin.
Core Graphics shuningdek standart (generic) rang fazolarida ranglar yaratish uchun CGColorCreateGenericRGB, CGColorCreateGenericGray va CGColorCreateGenericCMYK funksiyalarini taqdim etadi. Bu funksiyalar kodni soddalashtiradi va ochiq CGColorSpace yaratish zaruratini bartaraf qiladi. Bundan tashqari, Quartz 2D da asosiy ranglarning konstantalari aniqlangan: kCGColorWhite, kCGColorBlack, kCGColorClear.
Rang yaratishda komponentlarni berish tartibi muhimdir — u rang fazosi modeli bilan aniqlangan kanal tartibiga qat'iy mos kelishi kerak. RGB: qizil (0.0–1.0), yashil, ko'k, alfa (0.0–1.0). Gray: yorqinlik, alfa. CMYK: moviy, magenta, sariq, qora, alfa. Komponentlar tartibini buzish kompilyatsiya xatosisiz rangning noto'g'ri ko'rsatilishiga olib keladi.
Alfa kanali — rangning shaffofligini boshqaradigan to'rtinchi komponent (yoki Gray uchun ikkinchi). 1.0 qiymati to'liq shaffof emaslikka, 0.0 esa to'liq shaffoflikka mos keladi. CGColor da alfa kanali ixtiyoriydir: CGColorGetAlpha funksiyasi joriy alfa qiymatini qaytaradi, u standart funksiyalar orqali yaratilganda odatda 1.0 ga teng. Ranglarni aralashtirishda Core Graphics Porter-Duff Source Over qoidasiga ko'ra alfa kompozitsiyasidan foydalanadi.
CGColorSpace Core Graphics ning fabrik funksiyalari orqali yaratiladi: CGColorSpaceCreateDeviceRGB, CGColorSpaceCreateDeviceGray, CGColorSpaceCreateDeviceCMYK yoki nomlangan fazolar (sRGB, Display P3, Generic Gray) uchun CGColorSpaceCreateWithName. CGColorSpace ob'ekti o'zgarmas va thread-safe dir — bir xil ob'ekt bir nechta grafik kontekstlarda ishlatilishi mumkin.
Core Graphics nomlangan konstantalar orqali bir nechta oldindan belgilangan rang fazolarini taqdim etadi: kCGColorSpaceSRGB, kCGColorSpaceDisplayP3, kCGColorSpaceGenericGrayGamma2_2. Bu konstantalar CGColorSpaceCreateWithName ga uzatiladi. Keng rang gamutli iOS qurilmalari uchun Display P3 dan foydalanish tavsiya etiladi, chunki sRGB displey imkoniyatlaridan to'liq foydalana olmasligi mumkin.
ICC profillari — qurilmaning rang xarakteristikalarini tavsiflovchi standartlashtirilgan fayllardir. Core Graphics CGColorSpaceCreateWithICCProfile orqali ixtiyoriy ICC profili asosida CGColorSpace yaratishga imkon beradi. Bu ma'lum printer yoki monitor bilan aniq moslik talab qilinadigan professional foto chop va prepress ilovalarida ishlatiladi.
Core Graphics rang fazolari orasida konvertatsiyani CGContextSetFillColorWithColor yoki CGContextSetStrokeColorWithColor funksiyasi orqali chizish paytida avtomatik ravishda amalga oshiradi. Agar grafik kontekstining rang fazosi uzatilgan CGColor ning rang fazosidan farq qilsa, Quartz 2D ikkala fazoning ICC profillaridan foydalanib konvertatsiyani amalga oshiradi.
Aniq rang konvertatsiyasi uchun CGColorCreateCopyByMatchingToColorSpace ishlatiladi — bu funksiya komponentlari manba fazosidan maqsadli fazoga qayta hisoblangan yangi CGColor yaratadi. Apple Technical Note TN2313 (2024) ma'lumotlariga ko'ra, Display P3 dan sRGB ga konvertatsiya qilishda sRGB gamutidan tashqaridagi ranglar kesiladi, bu esa to'yinganlikni yo'qotishga olib keladi. Bu ayniqsa yorqin yashil va qizil ranglarda seziladi.
ColorSync macOS da grafik stek darajasida tizim rang boshqaruvini ta'minlaydi. Agar ilova aniq rang fazosini belgilamasa, Core Graphics ColorSync dan olingan displey fazosidan foydalanadi. Bu turli monitorlarda, hatto ular turli rang profillaridan foydalansalar ham, ranglarning bir xil ko'rinishini kafolatlaydi.
Amaliy misollarni — iOS ilovasida CGColor va CGColorSpace yaratish va ishlatishni ko'rib chiqamiz. Kod Swift tilida Core Graphics funksiyalaridan foydalangan holda yozilgan.
Ushbu misol uch xil rang fazosida qizil rang yaratishni ko'rsatadi. Bir xil RGB komponentlariga qaramay, rang CGColorSpace ning rang gamutiga qarab har xil ko'rinadi.
import CoreGraphics
// DeviceRGB da rang yaratish
let rgbSpace = CGColorSpaceCreateDeviceRGB()
let redColor = CGColorCreate(rgbSpace, [1.0, 0.0, 0.0, 1.0])
// Display P3 da rang yaratish
let p3Space = CGColorSpaceCreateWithName(kCGColorSpaceDisplayP3)
let p3RedColor = CGColorCreate(p3Space, [1.0, 0.0, 0.0, 1.0])
// Kulrang rang yaratish
let graySpace = CGColorSpaceCreateDeviceGray()
let grayColor = CGColorCreate(graySpace, [0.5, 1.0])
Misolda yorqin yashil rangni Display P3 dan sRGB ga konvertatsiya qilish amalga oshiriladi. Bunday konvertatsiyada sRGB gamutidan tashqaridagi ranglar moslashtiriladi, bu esa tusni o'zgartirishi mumkin.
let p3Space = CGColorSpaceCreateWithName(kCGColorSpaceDisplayP3)
let sRGBSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB)
// Display P3 da yorqin yashil (sRGB gamutidan tashqari)
let p3Green = CGColorCreate(p3Space, [0.0, 1.0, 0.0, 1.0])
// sRGB ga konvertatsiya
let srgbGreen = CGColorCreateCopyByMatchingToColorSpace(
sRGBSpace, p3Green, kCGRenderingIntentDefault
)
Ushbu misol shaxsiy UIView da CGColor yordamida to'ldirilgan doira chizishni ko'rsatadi. draw metodi to'ldirish rangi o'rnatiladigan joriy grafik kontekst UIGraphicsGetCurrentContext ni oladi.
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 beriladigan savollar
CGColor — C-stili API da ishlatiladigan Core Graphics dan past darajadagi rang taqdimotidir. UIColor — ichida CGColor saqlaydigan va qorong'u rejimdagi (traitCollection) farqlarni qo'llab-quvvatlaydigan yuqori darajadagi UIKit o'ramidir. UIColor .cgColor xususiyati orqali CGColor ga aylantirilishi mumkin.
Rang fazosi raqamli komponentlarning ko'rinadigan rang sifatida qanday talqin qilinishini belgilaydi. Bir xil raqamlar to'plami (1.0, 0.0, 0.0) RGB da qizil, CMYK da esa moviy rangni anglatadi. CGColorSpace bo'lmasa, Core Graphics rangni o'ziga xos displey xarakteristikalariga ega bo'lgan aniq qurilmada to'g'ri ko'rsata olmaydi.
iOS da UIView grafik konteksti standart sifatida DeviceRGB rang fazosi bilan yaratiladi. Keng rang gamutli displeyli qurilmalarda (iPad Pro 9.7 dyuym va yangilari, iPhone 7 va yangilari) shuningdek Display P3 mavjud bo'lib, u standart sRGB dan 25% ko'proq ranglarni qo'llab-quvvatlaydi.
Yo'q, CGColor o'zgarmas (immutable) ob'ektdir. Boshqa komponentlar bilan rang olish uchun CGColorCreate orqali yangi CGColor yaratish kerak. Bu ko'pchilik ob'ektlar thread-safe va chizishning bashorat qilinishi uchun o'zgarmas bo'lgan Core Graphics dizayniga mos keladi.
Konvertatsiya uchun maqsadli CMYK fazosi bilan CGColorCreateCopyByMatchingToColorSpace dan foydalaning. Core Graphics render intentini hisobga olgan holda ICC profillari orqali konvertatsiyani amalga oshiradi. Chop etish uchun kCGRenderingIntentRelativeColorimetric, fotorealistik tasvirlar uchun kCGRenderingIntentPerceptual ni tanlang.
Xulosa
CGColorCreateCopyByMatchingToColorSpace orqali amalga oshiriladiBiz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.