Core Graphics-এ রঙ নিয়ে কাজ করা দুটি পরস্পর সম্পর্কিত সত্তার চারপাশে নির্মিত — CGColor এবং CGColorSpace। CGColor উপাদান সহ একটি নির্দিষ্ট রঙ উপস্থাপন করে, যখন CGColorSpace সেই উপাদানগুলির ব্যাখ্যার মডেল সংজ্ঞায়িত করে। Apple Documentation (2026) অনুসারে, Core Graphics sRGB, Generic Gray এবং Generic CMYK সহ ২০টিরও বেশি স্ট্যান্ডার্ড রঙের স্থান সমর্থন করে। 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।
আলফা চ্যানেল হল চতুর্থ উপাদান (বা 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 পরিসরের বাইরের রঙগুলি ক্লিপ করা হয়, যার ফলে সম্পৃক্ততা হ্রাস পায়। এটি বিশেষ করে উজ্জ্বল সবুজ এবং লাল রঙে লক্ষণীয়।
আসুন একটি 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) এর জন্য সমর্থন যোগ করে। .cgColor বৈশিষ্ট্যের মাধ্যমে UIColor-কে 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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন