Core Graphics'ta renklerle çalışma, birbiriyle ilişkili iki varlık etrafında inşa edilmiştir — CGColor ve CGColorSpace. CGColor, bileşenleriyle belirli bir rengi temsil ederken, CGColorSpace bu bileşenlerin yorumlanma modelini tanımlar. Apple Documentation'a (2026) göre Core Graphics, sRGB, Generic Gray ve Generic CMYK dahil 20'den fazla standart renk uzayını destekler. CGColor ve CGColorSpace arasındaki farkı anlamak, iOS ve macOS'ta doğru grafik işleme için gereklidir.
Ana noktalar
CGColor, bir rengi temsil eden temel bir Core Graphics nesnesidir. CGColor yapısı, renk bileşenlerinin sayısal değerlerini ve CGColorSpace'e bir referansı depolar — bu bileşenlerin yorumlandığı renk uzayı. Bir renk uzayına bağlı olmadan, bileşenlerin sayısal değerlerinin bir anlamı yoktur: RGB'de (1.0, 0.0, 0.0) değeri kırmızıdır, ancak CMYK'da camgöbeğidir.
CGColorSpace, bir renk modelini ve temsil edilebilir değerlerin aralığını (gamut) tanımlayan bir nesnedir. Renk uzayı, sayısal bileşenlerin belirli bir çıktı cihazında görünür bir renge dönüştüğü kuralları belirler. Core Graphics, hem standart ICC profilli uzayları hem de özel dönüşüm tablolarıyla CGColorSpace aracılığıyla oluşturulan özel uzayları destekler.
Rengi renk uzayından ayıran mimari, Core Graphics'ın rengin basit bir sayı kümesi olarak depolandığı API'lerden ayıran temel bir özelliğidir. Bu yaklaşım, Core Graphics'ın cihazdan bağımsız renk yönetimi yapmasına olanak tanır: CGColorSpace profili aracılığıyla otomatik bileşen dönüşümü sayesinde aynı CGColor nesnesi farklı ekranlarda doğru şekilde görüntülenebilir.
Core Graphics, rengi ICC profillerine (International Color Consortium) dayalı bir model aracılığıyla uygular. Her CGColorSpace bir ICC profiline referans içerir — renk bileşenlerinin CIE XYZ'ye (cihazdan bağımsız bir renk uzayı) nasıl dönüştürüldüğüne dair standartlaştırılmış bir açıklama. Bu, Core Graphics'ın farklı ekranlar arasında otomatik kolorimetrik dengeleme yapmasına olanak tanır.
CGColorCreate işlevi aracılığıyla bir CGColor oluşturulurken, bileşenler iletilen diziden alınır ve belirtilen CGColorSpace'e bağlanır. Core Graphics, bileşenleri dahili bir temsile kopyalar ve renk uzayıyla bir ilişki oluşturur. Bundan sonra renk, herhangi bir grafik işleminde — dolgu, kontur, degrade, gölge — kullanıma hazırdır.
macOS'ta renk yönetimi, Core Graphics'a entegre edilmiş ColorSync çerçevesi aracılığıyla yapılır. ColorSync, ekran kalibrasyonunu takip eder ve bileşenleri kaynak renk uzayından hedef cihaz uzayına otomatik olarak dönüştürür. iOS'ta renk yönetimi, iPhone 7'den başlayarak geniş renk gamutunu (Display P3) destekleyen Quartz Core aracılığıyla uygulanır.
CGColorSpace dört temel renk modelini destekler: RGB (DeviceRGB, sRGB, Display P3), Gray (DeviceGray), CMYK (DeviceCMYK) ve Lab. Her model, renk bileşenlerinin sayısını ve anlamını tanımlar. RGB üç kanal kullanır — kırmızı, yeşil, mavi; Gray bir parlaklık kanalı kullanır; CMYK baskı için dört kanal kullanır; Lab üç kanal kullanır: parlaklık ve iki renk farkı bileşeni.
| Renk Modeli | Bileşenler | Kullanım | CGColorSpace Türü |
|---|---|---|---|
| RGB | Kırmızı, Yeşil, Mavi | Ekranlar, iOS/macOS grafikleri | kCGColorSpaceSRGB |
| Gray | Beyaz (tek kanal) | Siyah-beyaz grafikler, gölgeler | kCGColorSpaceGenericGray |
| CMYK | Camgöbeği, Magenta, Sarı, Siyah | Basılı ürünler, PDF | kCGColorSpaceGenericCMYK |
| Display P3 | R, G, B (geniş gamut) | Modern iOS cihazları | kCGColorSpaceDisplayP3 |
DeviceRGB, Core Graphics'ın en yaygın varsayılan renk uzayıdır. ICC profili olmadan standart bir LCD ekranın renk gamutunu kullanır. UIView veya NSView grafik bağlamı oluşturulurken Core Graphics, DeviceRGB'yi otomatik olarak varsayılan renk uzayı olarak atar. sRGB, sabit gamut ve gama ile ICC profilli bir sürümdür, web içeriği için önerilir.
Display P3, geniş renkli ekranlara sahip modern iOS cihazlarında kullanılan DCI-P3 standardına dayalı bir renk uzayıdır. sRGB'den yaklaşık %25 daha fazla görünür rengi kapsar, özellikle spektrumun yeşil ve kırmızı alanlarında. iOS'ta Display P3 ile çalışmak için iOS 9.3'ten itibaren kullanılabilen kCGColorSpaceDisplayP3 sabitini kullanın.
CGColor, bir CGColorSpace ve CGFloat bileşenlerinden oluşan bir dizi alan CGColorCreate işlevi aracılığıyla oluşturulur. Bileşen sayısı renk modeline bağlıdır: Gray için 1, RGB için 3, CMYK için 4. Oluşturulduktan sonra CGColor değiştirilemez (immutable) bir nesnedir — bileşenlerini değiştiremezsiniz, yalnızca yeni bir renk oluşturabilirsiniz.
Core Graphics ayrıca standart (genel) renk uzaylarında renkler oluşturmak için CGColorCreateGenericRGB, CGColorCreateGenericGray ve CGColorCreateGenericCMYK işlevlerini de sağlar. Bu işlevler, açıkça bir CGColorSpace oluşturma ihtiyacını ortadan kaldırarak kodu basitleştirir. Ayrıca Quartz 2D, temel renkler için sabitler tanımlar: kCGColorWhite, kCGColorBlack, kCGColorClear.
Bir renk oluştururken bileşen belirtme sırası önemlidir — renk uzayı modeli tarafından tanımlanan kanal sırasıyla kesinlikle eşleşmelidir. RGB: kırmızı (0.0–1.0), yeşil, mavi, alfa (0.0–1.0). Gray: parlaklık, alfa. CMYK: camgöbeği, magenta, sarı, siyah, alfa. Bileşen sırasının ihlali, derleme hatası olmadan yanlış renk görüntülenmesine yol açar.
Alfa kanalı, rengin saydamlığını kontrol eden dördüncü bileşendir (Gray için ikinci). 1.0 değeri tam opaklığa, 0.0 tam saydamlığa karşılık gelir. CGColor'daki alfa kanalı isteğe bağlıdır: CGColorGetAlpha işlevi geçerli alfa değerini döndürür, temel işlevler aracılığıyla oluşturulduğunda varsayılan olarak 1.0'dır. Renkleri karıştırırken Core Graphics, Porter-Duff Source Over kuralına göre alfa birleştirme kullanır.
CGColorSpace, Core Graphics fabrika işlevleri aracılığıyla oluşturulur: CGColorSpaceCreateDeviceRGB, CGColorSpaceCreateDeviceGray, CGColorSpaceCreateDeviceCMYK veya adlandırılmış uzaylar (sRGB, Display P3, Generic Gray) için CGColorSpaceCreateWithName. CGColorSpace nesnesi değiştirilemez ve iş parçacığı güvenlidir — aynı nesne birden çok grafik bağlamında kullanılabilir.
Core Graphics, adlandırılmış sabitler aracılığıyla birkaç önceden tanımlanmış renk uzayı sağlar: kCGColorSpaceSRGB, kCGColorSpaceDisplayP3, kCGColorSpaceGenericGrayGamma2_2. Bu sabitler CGColorSpaceCreateWithName'e iletilir. Geniş renk gamutlu iOS cihazları için Display P3 önerilir, çünkü sRGB ekran yeteneklerini tam olarak kullanamayabilir.
ICC profilleri, bir cihazın renk özelliklerini tanımlayan standartlaştırılmış dosyalardır. Core Graphics, CGColorSpaceCreateWithICCProfile aracılığıyla rastgele bir ICC profiline dayalı CGColorSpace oluşturulmasına izin verir. Bu, belirli bir yazıcı veya monitörle hassas eşleşme gerektiren profesyonel fotoğraf baskısı ve hazırlık uygulamalarında kullanılır.
Core Graphics, CGContextSetFillColorWithColor veya CGContextSetStrokeColorWithColor işlevleri aracılığıyla işleme sırasında renk uzayları arasında otomatik olarak dönüşüm yapar. Grafik bağlamının renk uzayı, iletilen CGColor'ın renk uzayından farklıysa, Quartz 2D her iki uzayın ICC profillerini kullanarak dönüşümü gerçekleştirir.
Açık renk dönüşümü için CGColorCreateCopyByMatchingToColorSpace kullanın — bileşenleri kaynak uzaydan hedef uzaya yeniden hesaplanan yeni bir CGColor oluşturan bir işlev. Apple Technical Note TN2313'e (2024) göre, Display P3'ten sRGB'ye dönüştürürken sRGB gamutu dışındaki renkler kırpılır ve bu da doygunluk kaybına neden olur. Bu, özellikle parlak yeşil ve kırmızı tonlarında belirgindir.
ColorSync, macOS'ta grafik yığını düzeyinde sistem genelinde renk yönetimi sağlar. Bir uygulama açık bir renk uzayı belirtmezse Core Graphics, ColorSync'ten alınan ekran uzayını kullanır. Bu, farklı renk profilleri kullansalar bile renklerin farklı monitörlerde aynı görünmesini sağlar.
Bir iOS uygulamasında CGColor ve CGColorSpace oluşturma ve kullanma ile ilgili pratik örneklere bakalım. Kod, Core Graphics işlevlerini kullanarak Swift'te yazılmıştır.
Bu örnek, üç farklı renk uzayında kırmızı bir renk oluşturmayı gösterir. Aynı RGB bileşenlerine rağmen, CGColorSpace gamutuna bağlı olarak renk farklı görünecektir.
import CoreGraphics
// DeviceRGB'de renk oluşturma
let rgbSpace = CGColorSpaceCreateDeviceRGB()
let redColor = CGColorCreate(rgbSpace, [1.0, 0.0, 0.0, 1.0])
// Display P3'te renk oluşturma
let p3Space = CGColorSpaceCreateWithName(kCGColorSpaceDisplayP3)
let p3RedColor = CGColorCreate(p3Space, [1.0, 0.0, 0.0, 1.0])
// Gri renk oluşturma
let graySpace = CGColorSpaceCreateDeviceGray()
let grayColor = CGColorCreate(graySpace, [0.5, 1.0])
Bu örnek, parlak yeşil bir rengi Display P3'ten sRGB'ye dönüştürür. Bu tür bir dönüşüm sırasında sRGB gamutu dışındaki renkler uyarlanacak ve bu da tonu değiştirebilir.
let p3Space = CGColorSpaceCreateWithName(kCGColorSpaceDisplayP3)
let sRGBSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB)
// Display P3'te parlak yeşil (sRGB gamutu dışında)
let p3Green = CGColorCreate(p3Space, [0.0, 1.0, 0.0, 1.0])
// sRGB'ye dönüştürme
let srgbGreen = CGColorCreateCopyByMatchingToColorSpace(
sRGBSpace, p3Green, kCGRenderingIntentDefault
)
Bu örnek, özel bir UIView'da CGColor kullanarak dolu bir daire çizmeyi gösterir. draw yöntemi, içinde dolgu renginin ayarlandığı geçerli grafik bağlamını UIGraphicsGetCurrentContext alır.
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))
}
}
Sık Sorulan Sorular
CGColor, C stili API'lerde kullanılan Core Graphics düşük seviyeli renk temsilidir. UIColor, dahili olarak CGColor'ı depolayan ve karanlık mod farklılıkları (traitCollection) için destek ekleyen üst düzey bir UIKit sarmalayıcısıdır. UIColor, .cgColor özelliği aracılığıyla CGColor'a dönüştürülebilir.
Renk uzayı, sayısal bileşenlerin görünür bir renk olarak nasıl yorumlandığını belirler. Aynı sayı kümesi (1.0, 0.0, 0.0) RGB'de kırmızı, ancak CMYK'da camgöbeği anlamına gelir. CGColorSpace olmadan Core Graphics, benzersiz ekran özelliklerine sahip belirli bir cihazda rengi doğru şekilde görüntüleyemez.
iOS'ta UIView grafik bağlamı varsayılan olarak DeviceRGB renk uzayıyla oluşturulur. Geniş renkli ekranlara sahip cihazlarda (iPad Pro 9,7 inç ve sonrası, iPhone 7 ve sonrası), standart sRGB'den %25 daha fazla rengi destekleyen Display P3 de mevcuttur.
Hayır, CGColor değiştirilemez (immutable) bir nesnedir. Farklı bileşenlere sahip bir renk elde etmek için CGColorCreate aracılığıyla yeni bir CGColor oluşturmalısınız. Bu, iş parçacığı güvenliği ve işleme öngörülebilirliği sağlamak için çoğu nesnenin değiştirilemez olduğu Core Graphics tasarımını izler.
Dönüşüm için hedef CMYK uzayıyla CGColorCreateCopyByMatchingToColorSpace kullanın. Core Graphics, işleme amacını dikkate alarak ICC profilleri aracılığıyla dönüşümü gerçekleştirecektir. Baskı için kCGRenderingIntentRelativeColorimetric veya fotogerçekçi görüntüler için kCGRenderingIntentPerceptual seçeneğini seçin.
Özet
CGColorCreateCopyByMatchingToColorSpace aracılığıyla açıkça gerçekleştirilirAnahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun