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 کی ایک اہم خصوصیت ہے جو اسے APIs سے ممتاز کرتی ہے جہاں رنگ کو نمبروں کے ایک سادہ سیٹ کے طور پر ذخیرہ کیا جاتا ہے۔ یہ طریقہ Core Graphics کو آلے سے آزاد رنگ کے انتظام کرنے کی اجازت دیتا ہے: CGColorSpace پروفائل کے ذریعے خودکار اجزاء کی تبدیلی کی بدولت ایک ہی CGColor آبجیکٹ مختلف ڈسپلے پر درست طریقے سے دکھایا جا سکتا ہے۔
Core Graphics رنگ کو ICC پروفائلز (International Color Consortium) پر مبنی ماڈل کے ذریعے نافذ کرتا ہے۔ ہر CGColorSpace میں ایک ICC پروفائل کا حوالہ ہوتا ہے — ایک معیاری وضاحت کہ رنگوں کے اجزاء CIE XYZ میں کیسے تبدیل ہوتے ہیں — ایک آلے سے آزاد رنگ کی جگہ۔ یہ Core Graphics کو مختلف سکرینوں کے درمیان خودکار کلریمیٹرک معاوضہ کرنے کی اجازت دیتا ہے۔
CGColorCreate فنکشن کے ذریعے CGColor بناتے وقت، اجزاء کو پاس کردہ صف سے حاصل کیا جاتا ہے اور مخصوص CGColorSpace سے منسلک کیا جاتا ہے۔ Core Graphics اجزاء کو اندرونی نمائندگی میں کاپی کرتا ہے اور رنگ کی جگہ کے ساتھ ایک تعلق بناتا ہے۔ اس کے بعد، رنگ کسی بھی گرافکس آپریشن — بھرائی، خاکہ، گرڈیئنٹ، سایہ میں استعمال کے لیے تیار ہے۔
macOS پر، رنگ کا انتظام Core Graphics میں ضم ColorSync فریم ورک کے ذریعے کیا جاتا ہے۔ 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 Technical Note 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں