CGColor va CGColorSpace: bu nima, rang modellari va ularni qanday boshqarish

Muallif: IT Sectr Nashr etilgan: 2026-07-21 O'qish vaqti: 9 daq

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 — rang komponentlari va rang fazosiga havolani saqlaydigan ob'ekt
  • CGColorSpace — rang komponentlarini talqin qilish modelini (RGB, Gray, CMYK) belgilaydigan ob'ekt
  • Har bir CGColor aynan bitta CGColorSpace bilan bog'langan — fazosiz rang to'liq emas hisoblanadi
  • Core Graphics qurilmalar orasida aniq rang uzatish uchun ICC-ga asoslangan rang boshqaruvini taqdim etadi
  • Rang fazolari orasida konvertatsiya macOS da ColorSync va iOS da Quartz Core orqali amalga oshiriladi

CGColor va CGColorSpace nima?

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 da ranglar qanday ishlaydi

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 ob'ektining hayotiy sikli

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.

ColorSync orqali rang boshqaruvi

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 da asosiy rang modellari

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 modeliKomponentlarQo'llanilishiCGColorSpace turi
RGBRed, Green, BlueEkranlar, iOS/macOS grafikasikCGColorSpaceSRGB
GrayWhite (bitta kanal)Oq-qora grafika, soyalarkCGColorSpaceGenericGray
CMYKCyan, Magenta, Yellow, BlackChop mahsulotlari, PDFkCGColorSpaceGenericCMYK
Display P3R, G, B (keng gamut)Zamonaviy iOS qurilmalarikCGColorSpaceDisplayP3

DeviceRGB va sRGB

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 rang gamuti

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 yaratish va boshqarish

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 va shaffoflik

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 bilan ishlash

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.

Asosiy CGColorSpace larni olish

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 va shaxsiy CGColorSpace

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.

Rang fazolari orasida konvertatsiya

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.

Swift da kod misollari

Amaliy misollarni — iOS ilovasida CGColor va CGColorSpace yaratish va ishlatishni ko'rib chiqamiz. Kod Swift tilida Core Graphics funksiyalaridan foydalangan holda yozilgan.

Turli rang fazolari bilan CGColor yaratish

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.

swift
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])

Rangni rang fazolari orasida konvertatsiya qilish

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.

swift
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
)

Grafik kontekstda CGColor ishlatish

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.

swift
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 UIColor dan nimasi bilan farq qiladi?

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.

Nega CGColor uchun rang fazosini belgilash kerak?

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 standart sifatida qaysi rang fazosi ishlatiladi?

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.

CGColor komponentlarini yaratgandan keyin o'zgartirish mumkinmi?

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.

CGColor ni RGB dan CMYK ga qanday o'zgartirish mumkin?

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

  • CGColor — komponentlar va rang fazosiga havolaga ega o'zgarmas rang ob'ekti
  • CGColorSpace — rang modelini (RGB, Gray, CMYK) va ifodalanadigan ranglar diapazonini belgilaydi
  • DeviceRGB — iOS va macOS grafik konteksti uchun standart rang fazosi
  • Display P3 — sRGB dan 25% ko'proq qamrovga ega zamonaviy Apple qurilmalari uchun keng rangli fazo
  • ICC profillari ColorSync orqali turli qurilmalar orasida aniq rang konvertatsiyasini ta'minlaydi
  • Alfa kanali — Porter-Duff kompozitsiyasida ishtirok etadigan ixtiyoriy shaffoflik komponenti
  • Konvertatsiya fazolar orasida chizish paytida avtomatik yoki ochiq ravishda CGColorCreateCopyByMatchingToColorSpace orqali amalga oshiriladi

Biz 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.

Loyihani muhokama qilish

Shuningdek o'qing