CGColor এবং CGColorSpace: এটি কী, রঙের মডেল এবং কীভাবে সেগুলি পরিচালনা করবেন

লেখক: IT Sectr প্রকাশিত: 2026-07-21 পড়ার সময়: 9 মিনিট

Core Graphics-এ রঙ নিয়ে কাজ করা দুটি পরস্পর সম্পর্কিত সত্তার চারপাশে নির্মিত — CGColor এবং CGColorSpace। CGColor উপাদান সহ একটি নির্দিষ্ট রঙ উপস্থাপন করে, যখন CGColorSpace সেই উপাদানগুলির ব্যাখ্যার মডেল সংজ্ঞায়িত করে। Apple Documentation (2026) অনুসারে, Core Graphics sRGB, Generic Gray এবং Generic CMYK সহ ২০টিরও বেশি স্ট্যান্ডার্ড রঙের স্থান সমর্থন করে। iOS এবং macOS-এ সঠিক গ্রাফিক্স রেন্ডারিংয়ের জন্য CGColor এবং CGColorSpace-এর মধ্যে পার্থক্য বোঝা অপরিহার্য।

মূল বিষয়

  • CGColor — একটি অবজেক্ট যা রঙের উপাদান এবং একটি রঙের স্থানের রেফারেন্স সংরক্ষণ করে
  • CGColorSpace — একটি অবজেক্ট যা রঙের উপাদানগুলির ব্যাখ্যার মডেল সংজ্ঞায়িত করে (RGB, Gray, CMYK)
  • প্রতিটি CGColor ঠিক একটি CGColorSpace-এর সাথে যুক্ত — স্থান ছাড়া রঙ অসম্পূর্ণ বলে বিবেচিত হয়
  • Core Graphics ডিভাইসগুলির মধ্যে সঠিক রঙ পুনরুৎপাদনের জন্য ICC-ভিত্তিক রঙ ব্যবস্থাপনা প্রদান করে
  • রঙের স্থানগুলির মধ্যে রূপান্তর macOS-এ ColorSync-এর মাধ্যমে এবং iOS-এ Quartz Core-এর মাধ্যমে করা হয়

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-এ রঙ কিভাবে কাজ করে

Core Graphics ICC প্রোফাইল (International Color Consortium) ভিত্তিক একটি মডেলের মাধ্যমে রঙ প্রয়োগ করে। প্রতিটি CGColorSpace-এ একটি ICC প্রোফাইলের রেফারেন্স থাকে — একটি মানক বিবরণ যে কীভাবে রঙের উপাদানগুলি CIE XYZ-এ রূপান্তরিত হয় — একটি ডিভাইস-স্বাধীন রঙের স্থান। এটি Core Graphics-কে বিভিন্ন স্ক্রিনের মধ্যে স্বয়ংক্রিয় কালোরিমেট্রিক ক্ষতিপূরণ করতে দেয়।

CGColor অবজেক্টের জীবনচক্র

CGColorCreate ফাংশনের মাধ্যমে CGColor তৈরি করার সময়, উপাদানগুলি পাস করা অ্যারে থেকে ক্যাপচার করা হয় এবং নির্দিষ্ট CGColorSpace-এর সাথে আবদ্ধ করা হয়। Core Graphics উপাদানগুলিকে একটি অভ্যন্তরীণ উপস্থাপনায় কপি করে এবং রঙের স্থানের সাথে একটি সম্পর্ক তৈরি করে। এর পরে, রঙ যে কোনও গ্রাফিক্স অপারেশন — ফিল, স্ট্রোক, গ্রেডিয়েন্ট, ছায়া — এ ব্যবহারের জন্য প্রস্তুত।

ColorSync-এর মাধ্যমে রঙ ব্যবস্থাপনা

macOS-এ, রঙ ব্যবস্থাপনা ColorSync ফ্রেমওয়ার্কের মাধ্যমে পরিচালিত হয়, যা Core Graphics-এ সংহত। ColorSync ডিসপ্লে ক্যালিব্রেশন ট্র্যাক করে এবং স্বয়ংক্রিয়ভাবে উৎস রঙের স্থান থেকে লক্ষ্য ডিভাইসের স্থানে উপাদানগুলি রূপান্তর করে। iOS-এ, রঙ ব্যবস্থাপনা iPhone 7 থেকে শুরু করে বিস্তৃত রঙের পরিসর (Display P3) সমর্থন সহ Quartz Core-এর মাধ্যমে প্রয়োগ করা হয়।

CGColorSpace-এ মৌলিক রঙের মডেল

CGColorSpace চারটি মৌলিক রঙের মডেল সমর্থন করে: RGB (DeviceRGB, sRGB, Display P3), Gray (DeviceGray), CMYK (DeviceCMYK) এবং Lab। প্রতিটি মডেল রঙের উপাদানের সংখ্যা এবং অর্থ সংজ্ঞায়িত করে। RGB তিনটি চ্যানেল ব্যবহার করে — লাল, সবুজ, নীল; Gray একটি লুমিন্যান্স চ্যানেল ব্যবহার করে; CMYK মুদ্রণের জন্য চারটি চ্যানেল ব্যবহার করে; Lab তিনটি চ্যানেল ব্যবহার করে: লুমিন্যান্স এবং দুটি রঙ-পার্থক্য উপাদান।

রঙের মডেলউপাদানব্যবহারCGColorSpace প্রকার
RGBলাল, সবুজ, নীলস্ক্রিন, iOS/macOS গ্রাফিক্সkCGColorSpaceSRGB
Grayসাদা (একটি চ্যানেল)কালো-সাদা গ্রাফিক্স, ছায়াkCGColorSpaceGenericGray
CMYKসায়ান, ম্যাজেন্টা, হলুদ, কালোমুদ্রিত পণ্য, PDFkCGColorSpaceGenericCMYK
Display P3R, G, B (বিস্তৃত পরিসর)আধুনিক iOS ডিভাইসkCGColorSpaceDisplayP3

DeviceRGB এবং sRGB

DeviceRGB Core Graphics-এর সবচেয়ে সাধারণ ডিফল্ট রঙের স্থান। এটি ICC প্রোফাইলিং ছাড়া একটি স্ট্যান্ডার্ড LCD ডিসপ্লের রঙের পরিসর ব্যবহার করে। UIView বা NSView গ্রাফিক্স কনটেক্সট তৈরি করার সময়, Core Graphics স্বয়ংক্রিয়ভাবে DeviceRGB-কে ডিফল্ট রঙের স্থান হিসাবে নির্ধারণ করে। sRGB হল একটি নির্দিষ্ট পরিসর এবং গামা সহ ICC-প্রোফাইলযুক্ত সংস্করণ, যা ওয়েব সামগ্রীর জন্য সুপারিশ করা হয়।

Display P3 — বিস্তৃত রঙের পরিসর

Display P3 DCI-P3 মানের উপর ভিত্তি করে একটি রঙের স্থান, যা বিস্তৃত-রঙের ডিসপ্লে সহ আধুনিক iOS ডিভাইসে ব্যবহৃত হয়। এটি sRGB-এর তুলনায় প্রায় 25% বেশি দৃশ্যমান রঙ কভার করে, বিশেষ করে স্পেকট্রামের সবুজ এবং লাল অঞ্চলে। iOS-এ Display P3 নিয়ে কাজ করতে, iOS 9.3 থেকে উপলব্ধ ধ্রুবক kCGColorSpaceDisplayP3 ব্যবহার করুন।

CGColor তৈরি এবং পরিচালনা

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 নিয়ে কাজ করা

CGColorSpace Core Graphics ফ্যাক্টরি ফাংশনের মাধ্যমে তৈরি করা হয়: CGColorSpaceCreateDeviceRGB, CGColorSpaceCreateDeviceGray, CGColorSpaceCreateDeviceCMYK বা নামযুক্ত স্থানের (sRGB, Display P3, Generic Gray) জন্য CGColorSpaceCreateWithName। CGColorSpace অবজেক্ট অপরিবর্তনীয় এবং থ্রেড-নিরাপদ — একই অবজেক্ট একাধিক গ্রাফিক্স কনটেক্সটে ব্যবহার করা যেতে পারে।

মৌলিক CGColorSpace পাওয়া

Core Graphics নামযুক্ত ধ্রুবকের মাধ্যমে বেশ কয়েকটি পূর্বনির্ধারিত রঙের স্থান সরবরাহ করে: kCGColorSpaceSRGB, kCGColorSpaceDisplayP3, kCGColorSpaceGenericGrayGamma2_2। এই ধ্রুবকগুলি CGColorSpaceCreateWithName-এ পাস করা হয়। বিস্তৃত রঙের পরিসর সহ iOS ডিভাইসের জন্য, Display P3 সুপারিশ করা হয়, কারণ sRGB ডিসপ্লের ক্ষমতা সম্পূর্ণরূপে ব্যবহার নাও করতে পারে।

ICC প্রোফাইল এবং কাস্টম CGColorSpace

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 পরিসরের বাইরের রঙগুলি ক্লিপ করা হয়, যার ফলে সম্পৃক্ততা হ্রাস পায়। এটি বিশেষ করে উজ্জ্বল সবুজ এবং লাল রঙে লক্ষণীয়।

Swift কোড উদাহরণ

আসুন একটি iOS অ্যাপ্লিকেশনে CGColor এবং CGColorSpace তৈরি এবং ব্যবহারের ব্যবহারিক উদাহরণ দেখি। কোডটি Core Graphics ফাংশন ব্যবহার করে Swift-এ লেখা।

বিভিন্ন রঙের স্থান সহ CGColor তৈরি করা

এই উদাহরণটি তিনটি ভিন্ন রঙের স্থানে একটি লাল রঙ তৈরি করা দেখায়। একই RGB উপাদান থাকা সত্ত্বেও, CGColorSpace পরিসরের উপর নির্ভর করে রঙটি ভিন্ন দেখাবে।

swift
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 পরিসরের বাইরের রঙগুলি অভিযোজিত হবে, যা রঙ পরিবর্তন করতে পারে।

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

গ্রাফিক্স কনটেক্সটে CGColor ব্যবহার করা

এই উদাহরণটি একটি কাস্টম UIView-এ CGColor ব্যবহার করে একটি ভর্তি বৃত্ত অঙ্কন প্রদর্শন করে। draw পদ্ধতি বর্তমান গ্রাফিক্স কনটেক্সট UIGraphicsGetCurrentContext পায়, যেখানে ফিল রঙ সেট করা হয়।

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

সচরাচর জিজ্ঞাসিত প্রশ্ন

CGColor কীভাবে UIColor থেকে আলাদা?

CGColor Core Graphics-এর একটি নিম্ন-স্তরের রঙ উপস্থাপনা যা C-স্টাইল API-তে ব্যবহৃত হয়। UIColor হল একটি উচ্চ-স্তরের UIKit র্যাপার যা অভ্যন্তরীণভাবে CGColor সংরক্ষণ করে এবং ডার্ক মোডের পার্থক্য (traitCollection) এর জন্য সমর্থন যোগ করে। .cgColor বৈশিষ্ট্যের মাধ্যমে UIColor-কে CGColor-এ রূপান্তর করা যেতে পারে।

CGColor-এর জন্য কেন রঙের স্থান নির্দিষ্ট করতে হবে?

রঙের স্থান নির্ধারণ করে কিভাবে সংখ্যাসূচক উপাদানগুলি দৃশ্যমান রঙ হিসাবে ব্যাখ্যা করা হয়। সংখ্যার একই সেট (1.0, 0.0, 0.0) RGB-তে লাল কিন্তু CMYK-তে সায়ান। CGColorSpace ছাড়া, Core Graphics তার অনন্য ডিসপ্লে বৈশিষ্ট্য সহ একটি নির্দিষ্ট ডিভাইসে সঠিকভাবে রঙ প্রদর্শন করতে পারে না।

iOS-এ ডিফল্টরূপে কোন রঙের স্থান ব্যবহার করা হয়?

iOS-এ, UIView গ্রাফিক্স কনটেক্সট ডিফল্টরূপে DeviceRGB রঙের স্থানের সাথে তৈরি করা হয়। বিস্তৃত-রঙের ডিসপ্লে সহ ডিভাইসে (iPad Pro 9.7-ইঞ্চি এবং পরবর্তী, iPhone 7 এবং পরবর্তী), Display P3-ও উপলব্ধ, যা স্ট্যান্ডার্ড sRGB-এর চেয়ে 25% বেশি রঙ সমর্থন করে।

তৈরির পরে কি CGColor উপাদান পরিবর্তন করা যায়?

না, CGColor একটি অপরিবর্তনীয় (immutable) অবজেক্ট। বিভিন্ন উপাদান সহ একটি রঙ পেতে, আপনাকে CGColorCreate-এর মাধ্যমে একটি নতুন CGColor তৈরি করতে হবে। এটি Core Graphics ডিজাইন অনুসরণ করে যেখানে থ্রেড নিরাপত্তা এবং রেন্ডারিং পূর্বাভাসযোগ্যতা নিশ্চিত করার জন্য বেশিরভাগ অবজেক্ট অপরিবর্তনীয়।

CGColor-কে RGB থেকে CMYK-তে কীভাবে রূপান্তর করবেন?

রূপান্তরের জন্য, লক্ষ্য CMYK স্থানের সাথে CGColorCreateCopyByMatchingToColorSpace ব্যবহার করুন। Core Graphics রেন্ডারিং ইন্টেন্ট বিবেচনায় নিয়ে ICC প্রোফাইলের মাধ্যমে রূপান্তর সম্পাদন করবে। মুদ্রণের জন্য kCGRenderingIntentRelativeColorimetric বা ফটোরিয়ালিস্টিক চিত্রের জন্য kCGRenderingIntentPerceptual চয়ন করুন।

সারাংশ

  • CGColor — উপাদান এবং রঙের স্থানের রেফারেন্স সহ একটি অপরিবর্তনীয় রঙের অবজেক্ট
  • CGColorSpace — রঙের মডেল (RGB, Gray, CMYK) এবং উপস্থাপনযোগ্য রঙের পরিসর সংজ্ঞায়িত করে
  • DeviceRGB — iOS এবং macOS গ্রাফিক্স কনটেক্সটের জন্য ডিফল্ট রঙের স্থান
  • Display P3 — sRGB-এর চেয়ে 25% বেশি কভারেজ সহ আধুনিক Apple ডিভাইসের জন্য একটি বিস্তৃত-রঙের স্থান
  • ICC প্রোফাইল ColorSync-এর মাধ্যমে বিভিন্ন ডিভাইসের মধ্যে সঠিক রঙ রূপান্তর নিশ্চিত করে
  • আলফা চ্যানেল — একটি ঐচ্ছিক স্বচ্ছতা উপাদান যা Porter-Duff কম্পোজিটিং-এ অংশগ্রহণ করে
  • রূপান্তর স্থানগুলির মধ্যে রেন্ডারিংয়ের সময় স্বয়ংক্রিয়ভাবে বা স্পষ্টভাবে CGColorCreateCopyByMatchingToColorSpace-এর মাধ্যমে সঞ্চালিত হয়

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন