Core Graphics में रंग के साथ काम करना दो परस्पर संबंधित संस्थाओं के आसपास बनाया गया है — CGColor और CGColorSpace। CGColor घटकों के साथ एक विशिष्ट रंग का प्रतिनिधित्व करता है, जबकि CGColorSpace उन घटकों की व्याख्या के मॉडल को परिभाषित करता है। Apple Documentation (2026) के अनुसार, Core Graphics sRGB, Generic Gray और Generic CMYK सहित 20 से अधिक मानक रंग स्थानों का समर्थन करता है। iOS और macOS पर सही ग्राफिक्स रेंडरिंग के लिए CGColor और CGColorSpace के बीच अंतर को समझना आवश्यक है।
मुख्य बातें
CGColor Core Graphics का एक मूलभूत ऑब्जेक्ट है जो रंग का प्रतिनिधित्व करता है। CGColor संरचना रंग घटकों के संख्यात्मक मान और CGColorSpace के संदर्भ को संग्रहीत करती है — वह रंग स्थान जिसमें इन घटकों की व्याख्या की जाती है। रंग स्थान से बंधे बिना, घटकों के संख्यात्मक मानों का कोई अर्थ नहीं है: RGB में मान (1.0, 0.0, 0.0) लाल है, लेकिन CMYK में सियान है।
CGColorSpace एक ऑब्जेक्ट है जो रंग मॉडल और प्रतिनिधित्व योग्य मानों की सीमा (gamut) को परिभाषित करता है। रंग स्थान उन नियमों को निर्धारित करता है जिनके द्वारा संख्यात्मक घटक किसी विशिष्ट आउटपुट डिवाइस पर दृश्य रंग में बदल जाते हैं। Core Graphics मानक ICC-प्रोफाइल वाले स्थानों और कस्टम ट्रांसफ़ॉर्मेशन तालिकाओं के साथ CGColorSpace के माध्यम से बनाए गए कस्टम स्थानों दोनों का समर्थन करता है।
रंग और रंग स्थान को अलग करने वाली वास्तुकला Core Graphics की एक प्रमुख विशेषता है जो इसे उन API से अलग करती है जहाँ रंग को संख्याओं के एक सरल सेट के रूप में संग्रहीत किया जाता है। यह दृष्टिकोण Core Graphics को डिवाइस-स्वतंत्र रंग प्रबंधन करने की अनुमति देता है: CGColorSpace प्रोफ़ाइल के माध्यम से स्वचालित घटक रूपांतरण के कारण एक ही CGColor ऑब्जेक्ट को विभिन्न डिस्प्ले पर सही ढंग से प्रदर्शित किया जा सकता है।
Core Graphics ICC प्रोफाइल (International Color Consortium) पर आधारित मॉडल के माध्यम से रंग को लागू करता है। प्रत्येक CGColorSpace में एक ICC प्रोफ़ाइल का संदर्भ होता है — एक मानकीकृत विवरण कि रंग घटक CIE XYZ में कैसे परिवर्तित होते हैं — एक डिवाइस-स्वतंत्र रंग स्थान। यह Core Graphics को विभिन्न स्क्रीनों के बीच स्वचालित कलरिमेट्रिक क्षतिपूर्ति करने की अनुमति देता है।
CGColorCreate फ़ंक्शन के माध्यम से CGColor बनाते समय, घटकों को पास की गई सरणी से कैप्चर किया जाता है और निर्दिष्ट CGColorSpace से बांधा जाता है। Core Graphics घटकों को एक आंतरिक प्रतिनिधित्व में कॉपी करता है और रंग स्थान के साथ एक संबंध बनाता है। उसके बाद, रंग किसी भी ग्राफिक्स ऑपरेशन — भरण, स्ट्रोक, ग्रेडिएंट, छाया में उपयोग के लिए तैयार है।
macOS पर, रंग प्रबंधन ColorSync फ्रेमवर्क के माध्यम से किया जाता है, जो Core Graphics में एकीकृत है। ColorSync डिस्प्ले कैलिब्रेशन को ट्रैक करता है और स्रोत रंग स्थान से लक्ष्य डिवाइस स्थान में घटकों को स्वचालित रूप से परिवर्तित करता है। iOS पर, रंग प्रबंधन iPhone 7 से शुरू होकर, व्यापक रंग सरगम (Display P3) के समर्थन के साथ Quartz Core के माध्यम से कार्यान्वित किया जाता है।
CGColorSpace चार मूल रंग मॉडल का समर्थन करता है: RGB (DeviceRGB, sRGB, Display P3), Gray (DeviceGray), CMYK (DeviceCMYK) और Lab। प्रत्येक मॉडल रंग घटकों की संख्या और अर्थ को परिभाषित करता है। RGB तीन चैनलों का उपयोग करता है — लाल, हरा, नीला; Gray एक ल्यूमिनेंस चैनल का उपयोग करता है; CMYK प्रिंटिंग के लिए चार चैनलों का उपयोग करता है; Lab तीन चैनलों का उपयोग करता है: ल्यूमिनेंस और दो रंग-अंतर घटक।
| रंग मॉडल | घटक | उपयोग | CGColorSpace प्रकार |
|---|---|---|---|
| RGB | लाल, हरा, नीला | स्क्रीन, iOS/macOS ग्राफिक्स | kCGColorSpaceSRGB |
| Gray | सफेद (एक चैनल) | काले-सफेद ग्राफिक्स, छायाएं | kCGColorSpaceGenericGray |
| CMYK | सियान, मैजेंटा, पीला, काला | मुद्रित उत्पाद, PDF | kCGColorSpaceGenericCMYK |
| Display P3 | R, G, B (विस्तृत सरगम) | आधुनिक iOS डिवाइस | kCGColorSpaceDisplayP3 |
DeviceRGB Core Graphics का सबसे सामान्य डिफ़ॉल्ट रंग स्थान है। यह ICC प्रोफाइलिंग के बिना एक मानक LCD डिस्प्ले के रंग सरगम का उपयोग करता है। UIView या NSView ग्राफिक्स संदर्भ बनाते समय, Core Graphics स्वचालित रूप से DeviceRGB को डिफ़ॉल्ट रंग स्थान के रूप में निर्दिष्ट करता है। sRGB एक निश्चित सरगम और गामा के साथ ICC-प्रोफाइल वाला संस्करण है, जो वेब सामग्री के लिए अनुशंसित है।
Display P3 DCI-P3 मानक पर आधारित एक रंग स्थान है, जो विस्तृत-रंग डिस्प्ले वाले आधुनिक iOS उपकरणों में उपयोग किया जाता है। यह sRGB की तुलना में लगभग 25% अधिक दृश्य रंगों को कवर करता है, विशेष रूप से स्पेक्ट्रम के हरे और लाल क्षेत्रों में। iOS पर Display P3 के साथ काम करने के लिए, iOS 9.3 से उपलब्ध स्थिरांक kCGColorSpaceDisplayP3 का उपयोग करें।
CGColor CGColorCreate फ़ंक्शन के माध्यम से बनाया जाता है, जो CGColorSpace और CGFloat घटकों की एक सरणी लेता है। घटकों की संख्या रंग मॉडल पर निर्भर करती है: Gray के लिए 1, RGB के लिए 3, CMYK के लिए 4। एक बार बनने के बाद, CGColor एक अपरिवर्तनीय (immutable) ऑब्जेक्ट है — आप इसके घटकों को बदल नहीं सकते, केवल एक नया रंग बना सकते हैं।
Core Graphics मानक (सामान्य) रंग स्थानों में रंग बनाने के लिए CGColorCreateGenericRGB, CGColorCreateGenericGray और CGColorCreateGenericCMYK फ़ंक्शन भी प्रदान करता है। ये फ़ंक्शन स्पष्ट रूप से CGColorSpace बनाने की आवश्यकता को समाप्त करके कोड को सरल बनाते हैं। इसके अतिरिक्त, Quartz 2D मूल रंगों के लिए स्थिरांक परिभाषित करता है: kCGColorWhite, kCGColorBlack, kCGColorClear।
रंग बनाते समय, घटकों को निर्दिष्ट करने का क्रम महत्वपूर्ण है — इसे रंग स्थान मॉडल द्वारा परिभाषित चैनल क्रम से सख्ती से मेल खाना चाहिए। RGB: लाल (0.0–1.0), हरा, नीला, अल्फा (0.0–1.0)। Gray: ल्यूमिनेंस, अल्फा। CMYK: सियान, मैजेंटा, पीला, काला, अल्फा। घटक क्रम का उल्लंघन संकलन त्रुटि के बिना गलत रंग प्रदर्शन की ओर ले जाता है।
अल्फा चैनल चौथा घटक (या Gray के लिए दूसरा) है जो रंग की पारदर्शिता को नियंत्रित करता है। मान 1.0 पूर्ण अपारदर्शिता से मेल खाता है, 0.0 पूर्ण पारदर्शिता से। CGColor में अल्फा चैनल वैकल्पिक है: CGColorGetAlpha फ़ंक्शन वर्तमान अल्फा मान लौटाता है, जो मूल फ़ंक्शन के माध्यम से बनाने पर डिफ़ॉल्ट रूप से 1.0 होता है। रंगों को मिश्रित करते समय, Core Graphics Porter-Duff Source Over नियम के अनुसार अल्फा कम्पोज़िटिंग का उपयोग करता है।
CGColorSpace Core Graphics फ़ैक्टरी फ़ंक्शन के माध्यम से बनाया जाता है: CGColorSpaceCreateDeviceRGB, CGColorSpaceCreateDeviceGray, CGColorSpaceCreateDeviceCMYK या नामित स्थानों (sRGB, Display P3, Generic Gray) के लिए CGColorSpaceCreateWithName। CGColorSpace ऑब्जेक्ट अपरिवर्तनीय और थ्रेड-सेफ है — एक ही ऑब्जेक्ट का उपयोग कई ग्राफिक्स संदर्भों में किया जा सकता है।
Core Graphics नामित स्थिरांक के माध्यम से कई पूर्वनिर्धारित रंग स्थान प्रदान करता है: kCGColorSpaceSRGB, kCGColorSpaceDisplayP3, kCGColorSpaceGenericGrayGamma2_2। ये स्थिरांक CGColorSpaceCreateWithName में पास किए जाते हैं। विस्तृत रंग सरगम वाले iOS उपकरणों के लिए, Display P3 की अनुशंसा की जाती है, क्योंकि sRGB डिस्प्ले क्षमताओं का पूरी तरह से उपयोग नहीं कर सकता है।
ICC प्रोफाइल मानकीकृत फ़ाइलें हैं जो डिवाइस की रंग विशेषताओं का वर्णन करती हैं। Core Graphics CGColorSpaceCreateWithICCProfile के माध्यम से एक मनमाना ICC प्रोफ़ाइल के आधार पर CGColorSpace बनाने की अनुमति देता है। इसका उपयोग फोटो प्रिंटिंग और प्रीप्रेस के लिए पेशेवर अनुप्रयोगों में किया जाता है जहाँ किसी विशिष्ट प्रिंटर या मॉनिटर से सटीक मिलान की आवश्यकता होती है।
Core Graphics CGContextSetFillColorWithColor या CGContextSetStrokeColorWithColor फ़ंक्शन के माध्यम से रेंडरिंग के दौरान स्वचालित रूप से रंग स्थानों के बीच रूपांतरण करता है। यदि ग्राफिक्स संदर्भ का रंग स्थान पास किए गए CGColor के रंग स्थान से भिन्न है, तो Quartz 2D दोनों स्थानों के ICC प्रोफाइल का उपयोग करके रूपांतरण करता है।
स्पष्ट रंग रूपांतरण के लिए, CGColorCreateCopyByMatchingToColorSpace का उपयोग करें — एक फ़ंक्शन जो एक नया CGColor बनाता है जिसके घटक स्रोत स्थान से लक्ष्य स्थान में पुनर्गणना किए जाते हैं। Apple तकनीकी नोट TN2313 (2024) के अनुसार, Display P3 से sRGB में रूपांतरण करते समय, sRGB सरगम के बाहर के रंग क्लिप हो जाते हैं, जिससे संतृप्ति में कमी आती है। यह विशेष रूप से चमकीले हरे और लाल रंगों में ध्यान देने योग्य है।
ColorSync macOS पर ग्राफिक्स स्टैक स्तर पर सिस्टम-स्तरीय रंग प्रबंधन प्रदान करता है। यदि कोई एप्लिकेशन स्पष्ट रंग स्थान निर्दिष्ट नहीं करता है, तो Core Graphics ColorSync से प्राप्त डिस्प्ले स्थान का उपयोग करता है। यह सुनिश्चित करता है कि अलग-अलग मॉनिटर पर रंग एक जैसे दिखें, भले ही वे अलग-अलग रंग प्रोफाइल का उपयोग करते हों।
आइए iOS एप्लिकेशन में CGColor और CGColorSpace बनाने और उपयोग करने के व्यावहारिक उदाहरण देखें। कोड Core Graphics फ़ंक्शन का उपयोग करके Swift में लिखा गया है।
यह उदाहरण तीन अलग-अलग रंग स्थानों में लाल रंग बनाना दिखाता है। समान RGB घटक होने के बावजूद, CGColorSpace सरगम के आधार पर रंग अलग दिखाई देगा।
import CoreGraphics
// DeviceRGB में रंग बनाना
let rgbSpace = CGColorSpaceCreateDeviceRGB()
let redColor = CGColorCreate(rgbSpace, [1.0, 0.0, 0.0, 1.0])
// Display P3 में रंग बनाना
let p3Space = CGColorSpaceCreateWithName(kCGColorSpaceDisplayP3)
let p3RedColor = CGColorCreate(p3Space, [1.0, 0.0, 0.0, 1.0])
// ग्रे रंग बनाना
let graySpace = CGColorSpaceCreateDeviceGray()
let grayColor = CGColorCreate(graySpace, [0.5, 1.0])
यह उदाहरण Display P3 से sRGB में एक चमकीले हरे रंग को परिवर्तित करता है। ऐसे रूपांतरण के दौरान, sRGB सरगम के बाहर के रंगों को अनुकूलित किया जाएगा, जिससे रंग बदल सकता है।
let p3Space = CGColorSpaceCreateWithName(kCGColorSpaceDisplayP3)
let sRGBSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB)
// Display P3 में चमकीला हरा (sRGB सरगम के बाहर)
let p3Green = CGColorCreate(p3Space, [0.0, 1.0, 0.0, 1.0])
// sRGB में रूपांतरण
let srgbGreen = CGColorCreateCopyByMatchingToColorSpace(
sRGBSpace, p3Green, kCGRenderingIntentDefault
)
यह उदाहरण कस्टम UIView में CGColor का उपयोग करके भरे हुए वृत्त को चित्रित करना प्रदर्शित करता है। draw विधि वर्तमान ग्राफिक्स संदर्भ UIGraphicsGetCurrentContext प्राप्त करती है, जिसमें भरण रंग सेट किया जाता है।
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))
}
}
अक्सर पूछे जाने वाले प्रश्न
CGColor Core Graphics से एक निम्न-स्तरीय रंग प्रतिनिधित्व है जो C-शैली API में उपयोग किया जाता है। UIColor एक उच्च-स्तरीय UIKit रैपर है जो आंतरिक रूप से CGColor संग्रहीत करता है और डार्क मोड अंतर (traitCollection) के लिए समर्थन जोड़ता है। UIColor को .cgColor गुण के माध्यम से CGColor में परिवर्तित किया जा सकता है।
रंग स्थान निर्धारित करता है कि संख्यात्मक घटकों को दृश्य रंग के रूप में कैसे व्याख्यायित किया जाता है। संख्याओं का एक ही सेट (1.0, 0.0, 0.0) RGB में लाल है, लेकिन CMYK में सियान है। CGColorSpace के बिना, Core Graphics अपनी अनूठी डिस्प्ले विशेषताओं वाले किसी विशिष्ट डिवाइस पर रंग को सही ढंग से प्रदर्शित नहीं कर सकता है।
iOS पर, UIView ग्राफिक्स संदर्भ डिफ़ॉल्ट रूप से DeviceRGB रंग स्थान के साथ बनाया जाता है। विस्तृत-रंग डिस्प्ले वाले उपकरणों (iPad Pro 9.7-इंच और बाद के, iPhone 7 और बाद के) पर, Display P3 भी उपलब्ध है, जो मानक sRGB से 25% अधिक रंगों का समर्थन करता है।
नहीं, CGColor एक अपरिवर्तनीय (immutable) ऑब्जेक्ट है। विभिन्न घटकों वाला रंग प्राप्त करने के लिए, आपको CGColorCreate के माध्यम से एक नया CGColor बनाना होगा। यह Core Graphics डिज़ाइन का अनुसरण करता है जहाँ थ्रेड सुरक्षा और रेंडरिंग पूर्वानुमेयता सुनिश्चित करने के लिए अधिकांश ऑब्जेक्ट अपरिवर्तनीय हैं।
रूपांतरण के लिए, लक्ष्य CMYK स्थान के साथ CGColorCreateCopyByMatchingToColorSpace का उपयोग करें। Core Graphics रेंडरिंग इंटेंट को ध्यान में रखते हुए ICC प्रोफाइल के माध्यम से रूपांतरण करेगा। प्रिंटिंग के लिए kCGRenderingIntentRelativeColorimetric या फोटोरियलिस्टिक छवियों के लिए kCGRenderingIntentPerceptual चुनें।
सारांश
CGColorCreateCopyByMatchingToColorSpace के माध्यम से किया जाता हैहम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें