Core Graphics — یہ کیا ہے، کام کرنے کے اصول اور 2D گرافکس کے لیے فریم ورک

مصنف: IT Sectr اشاعت: 2026-07-21 مطالعے کا وقت: 10 منٹ

Core Graphics Apple کا 2D رینڈرنگ فریم ورک ہے، جو Core Foundation کا حصہ ہے اور iOS، macOS، tvOS اور watchOS پر دستیاب ہے۔ یہ ویکٹر اور راسٹر گرافکس کے ساتھ کام کرنے کے لیے نچلی سطح کی C API فراہم کرتا ہے، جس میں پاتھ، گریڈینٹ، شیڈو، امیجز اور ٹیکسٹ ڈرائنگ شامل ہے۔ Core Graphics UIKit، SwiftUI اور AppKit کی بنیاد کے طور پر کام کرتا ہے۔ Apple Developer Documentation، 2026 کے مطابق، یہ فریم ورک 90% سے زیادہ iOS ایپس میں استعمال ہوتا ہے، کیونکہ ہر دکھائی دینے والا عنصر Core Graphics یا اس کے ہارڈویئر مساوی سے گزرتا ہے۔

اہم نکات

  • Core Graphics ویکٹر اور راسٹر رینڈرنگ کے لیے Apple کا بنیادی 2D فریم ورک ہے۔
  • CGContext فریم ورک کا مرکزی آبجیکٹ ہے جس کے ذریعے تمام ڈرائنگ آپریشنز انجام دیے جاتے ہیں۔
  • CGPath مختلف سیاق و سباق میں دوبارہ استعمال کے لیے ایک ناقابل تبدیلی ویکٹر پاتھ ہے۔
  • CGGradient کلر اسپیس سپورٹ کے ساتھ لکیری اور ریڈیل گریڈینٹ بنانے کے لیے آبجیکٹ ہے۔
  • CGImage ایک راسٹر امیج ہے جسے ڈرا، ٹرانسفارم اور ماسک کیا جا سکتا ہے۔

Core Graphics کیا ہے؟

Core Graphics (Quartz 2D کے نام سے بھی جانا جاتا ہے) ایک فریم ورک ہے جو Apple کے 2D گرافکس انجن کو لاگو کرتا ہے۔ یہ Quartz پورٹیبل گرافکس لائبریری پر مبنی ہے اور صفحہ پر مبنی ڈرائنگ ماڈل استعمال کرتا ہے، جہاں ہر عمل ایک ترتیب میں ایک کمانڈ ہے جو کاغذ پر ڈرائنگ جیسی ہے۔ Core Graphics اینٹی الیاسنگ، شفافیت (الفا کمپوزٹنگ) اور ICC کلر اسپیس کو سپورٹ کرتا ہے۔

Core Graphics کا آرکیٹیکچر ایک گرافکس سیاق (CGContext) کے گرد بنایا گیا ہے جو ہدف آؤٹ پٹ ڈیوائس — اسکرین، پرنٹر، PDF دستاویز یا راسٹر بفر کو انکیپسلیٹ کرتا ہے۔ سیاق موجودہ ترتیبات کو منظم کرتا ہے: رنگ، لائن کی موٹائی، تبدیلی، کلپنگ ایریا اور فونٹس۔ یہ نقطہ نظر ڈرائنگ کوڈ کو تبدیل کیے بغیر مختلف آؤٹ پٹ ڈیوائسز کے لیے یکساں API فراہم کرتا ہے۔

Core Graphics بنیادی طور پر CPU پر کام کرتا ہے، ویکٹر ماڈل (ریزولوشن سے آزاد) استعمال کرتے ہوئے۔ اس کا مطلب ہے کہ لائنیں اور منحنی خطوط ڈرائنگ کے وقت موجودہ ڈیوائس ریزولوشن پر راسٹرائز کیے جاتے ہیں۔ Metal کے برعکس، Core Graphics کو واضح GPU وسائل کے انتظام کی ضرورت نہیں ہے — سسٹم تمام اصلاح کو سنبھالتا ہے۔ زیادہ تر 2D کاموں (گرافکس، چارٹ، کسٹم UI عناصر) کے لیے، Core Graphics کی کارکردگی 60 FPS برقرار رکھنے کے لیے کافی ہے۔

آرکیٹیکچر اور اہم اقسام

Core Graphics میں تقریباً 50 بنیادی اقسام (مبہم اقسام) شامل ہیں، ہر ایک مخصوص فعالیت کے لیے ذمہ دار ہے۔ تمام اقسام Core Foundation میموری مینجمنٹ کے قواعد پر عمل کرتی ہیں: یہ نام میں Create والے فنکشنز کے ذریعے بنائی جاتی ہیں، CGRelease کال کی ضرورت ہوتی ہیں، اور Objective-C میں ARC-مطابق نہیں ہیں (تاہم Swift CF_RETURNS_RETAINED تشریحات کے ذریعے خود بخود میموری کا انتظام کرتا ہے)۔

Core Graphics کی اہم اقسام

CGContext — ڈرائنگ سیاق، فریم ورک کی مرکزی قسم۔ CGPath — ایک ناقابل تبدیلی ویکٹر پاتھ۔ CGColor — مخصوص کلر اسپیس کے ساتھ رنگ۔ CGGradient — گریڈینٹ بھرائی۔ CGImage — ایک راسٹر امیج۔ CGLayer — بار بار ڈرائنگ کے لیے بہتر بنایا گیا آف لائن بفر۔ CGDataProvider — تصاویر کے لیے ڈیٹا کا ذریعہ۔ CGColorSpace — ایک کلر اسپیس (sRGB, Display P3, Gray)۔

ہر قسم کم سے کم اوور ہیڈ کے لیے ڈیزائن کی گئی ہے: CGPath کو کیش کیا جا سکتا ہے اور مختلف سیاق و سباق کے درمیان دوبارہ استعمال کیا جا سکتا ہے، CGColor کو پاس کرتے وقت GPU ہارڈویئر نمائندگی میں تبدیل کیا جاتا ہے، CGLayer پہلے سے راسٹرائزڈ مواد کو ذخیرہ کرتا ہے۔ یہ آرکیٹیکچر Core Graphics کو سادہ UI کاموں اور پیشہ ورانہ گرافکس ایڈیٹرز دونوں میں مؤثر طریقے سے کام کرنے کی اجازت دیتا ہے۔

قسممقصدمیموری مینجمنٹ
CGContextگرافکس سیاقCFRelease یا Swift میں خودکار
CGPathویکٹر پاتھCFRelease (ناقابل تبدیلی)
CGColorکلر اسپیس میں رنگCFRelease یا CGColorCreate
CGImageراسٹر امیجCFRelease (بنانے کے بعد)
CGLayerآف لائن بفرCFRelease یا CGLayerCreate

CGPath: ویکٹر پاتھ اور ان کی اصلاح

CGPath ایک ناقابل تبدیلی آبجیکٹ ہے جو ہندسی حصوں کی ترتیب کو بیان کرتا ہے: سیدھی لائنیں، بیزیئر منحنی خطوط، قوس اور بندش۔ UIBezierPath کے برعکس، CGPath میں ڈرائنگ کے طریقے نہیں ہیں — یہ صرف جیومیٹری کو ذخیرہ کرتا ہے۔ ڈرائنگ کے لیے، CGPath کو سیاق میں شامل کیا جاتا ہے (CGContextAddPath) اور پھر strokePath یا fillPath کے ذریعے رینڈر کیا جاتا ہے۔ ناقابل تبدیلی تھریڈ سیفٹی اور کیشنگ کی صلاحیت کو یقینی بناتی ہے۔

پاتھ بنانا اور بہتر بنانا

CGPathCreateMutable مرحلہ وار تعمیر کے لیے ایک قابل تبدیلی پاتھ (CGMutablePathRef) بناتا ہے۔ حتمی اسمبلی کے بعد، اسے ناقابل تبدیلی CGPathRef میں تبدیل کیا جاتا ہے۔ Apple CGPath میں پوائنٹس کی تعداد کو کم سے کم کرنے کی سفارش کرتا ہے — بہت پیچیدہ پاتھ (1000 سے زیادہ حصے) راسٹرائزیشن کو سست کر دیتے ہیں۔ اصلاح کے لیے، CGPathCreateCopyBySimplifyingPath استعمال کریں، جو بے کار کولینیئر پوائنٹس کو ہٹاتا ہے۔

دو CGPath آبجیکٹس کے درمیان شکل کو حرکت دینے کے لیے، آپ CAShapeLayer کی path پراپرٹی پر CABasicAnimation استعمال کر سکتے ہیں۔ حد: دونوں CGPath میں ایک جتنے حصے (کنٹرول پوائنٹس) ہونے چاہئیں۔ CGPathApply فنکشن آپ کو پاتھ کے تمام عناصر کو ٹریورس کرنے اور ان کی ساخت کا موازنہ کرنے کی اجازت دیتا ہے۔ اگر حصے مماثل نہیں ہوتے ہیں، تو اینیمیشن جھٹکے دار ہوگی — اس صورت میں، دستی پوائنٹ انٹرپولیشن کے لیے CADisplayLink استعمال کریں۔

swift
// قابل تبدیلی پاتھ بنائیں
let mutablePath = CGMutablePath()
mutablePath.moveTo(to: CGPoint(x: 0, y: 0))
mutablePath.addLine(to: CGPoint(x: 100, y: 0))
mutablePath.addLine(to: CGPoint(x: 100, y: 100))
mutablePath.closeSubpath()

// محفوظ کیشنگ کے لیے ناقابل تبدیلی میں تبدیل کریں
let immutablePath: CGPath = mutablePath
CATransaction.perform {
    shapeLayer.path = immutablePath
}

گریڈینٹ: CGGradient اور CGShading

CGGradient ایک آبجیکٹ ہے جو سیدھی لکیر کے ساتھ (لکیری گریڈینٹ) یا مرکز سے باہر کی طرف (ریڈیل گریڈینٹ) دو یا زیادہ رنگوں کے درمیان ہموار منتقلی کی وضاحت کرتا ہے۔ CGGradient مخصوص کلر اسپیس، CGColorRef کی اری اور 0.0 سے 1.0 تک سٹاپ پوزیشنز کی اری کے ساتھ بنایا جاتا ہے۔ بنانے کے بعد، گریڈینٹ کو مختلف سیاق و سباق میں کئی بار دوبارہ استعمال کیا جا سکتا ہے۔

اعلی درجے کے گریڈینٹ کے لیے CGShading

CGShading ایک زیادہ طاقتور میکانزم ہے جو پاتھ کے ساتھ رنگ تبدیل کرنے کے فنکشن کی وضاحت کرنے کی اجازت دیتا ہے۔ CGGradient کے برعکس، جو رنگوں کے ایک مقررہ سیٹ کے ساتھ کام کرتا ہے، CGShading ایک کال بیک فنکشن (CGFunctionRef) استعمال کرتا ہے جو ہر پوائنٹ پر رنگ کا حساب لگاتا ہے۔ یہ غیر لکیری منتقلی اور مرکب رنگ سکیموں کے ساتھ پیچیدہ گریڈینٹ بنانے کے قابل بناتا ہے۔

کسی شکل کے اندر گریڈینٹ کھینچنے کے لیے، اس شکل کے پاتھ پر ایک کلپ ضروری ہے۔ ترتیب: سیاق میں پاتھ شامل کریں، CGContextClip کو کال کریں، پھر گریڈینٹ کھینچیں۔ کلپ کے بغیر، گریڈینٹ پورے سیاق کو بھر دیتا ہے۔ iOS میں، CGGradient کو آسان اور زیادہ کارکردگی والے آپشن کے طور پر تجویز کیا جاتا ہے — CGShading صرف کسٹم کلر فنکشنز کے لیے موزوں ہے۔

swift
func drawGradient(ctx: CGContext, rect: CGRect) {
    let colors = [UIColor.red.cgColor, UIColor.blue.cgColor] as CFArray
    guard let gradient = CGGradient(
        colorsSpace: CGColorSpaceCreateDeviceRGB(),
        colors: colors,
        locations: [0.0, 1.0]
    ) else { return }

    ctx.saveGState()
    ctx.addEllipse(in: rect)
    ctx.clip()
    ctx.drawLinearGradient(
        gradient,
        start: CGPoint(x: rect.midX, y: rect.minY),
        end: CGPoint(x: rect.midX, y: rect.maxY),
        options: []
    )
    ctx.restoreGState()
}

تصاویر کے ساتھ کام: CGImage اور CGLayer

CGImage Core Graphics میں ایک راسٹر امیج ہے جسے فائل سے لوڈ کیا جا سکتا ہے، پروگرام کے ذریعے بنایا جا سکتا ہے یا UIImage سے حاصل کیا جا سکتا ہے۔ CGImage میں پکسل ڈیٹا، کلر اسپیس کی معلومات، سائز، بٹ گہرائی اور ڈیٹا لے آؤٹ شامل ہوتا ہے۔ UIImage کے برعکس، CGImage Retina اسکیلنگ کا انتظام نہیں کرتا — یہ ذمہ داری scale پیرامیٹر کے ذریعے ڈویلپر پر آتی ہے۔

CGLayer — بار بار ڈرائنگ کی اصلاح

CGLayer جامد مواد کی پہلے سے راسٹرائزیشن کے لیے ایک آف لائن بفر ہے۔ اگر ڈرائنگ کمانڈز کا ایک ہی سیٹ بار بار انجام دیا جاتا ہے (مثال کے طور پر، بیک گراؤنڈ پیٹرن)، CGLayer اسے ایک بار راسٹرائز کرتا ہے اور پھر اسے سیاق میں کاپی کر دیتا ہے۔ Apple کے مطابق، CGLayer کا استعمال بار بار ڈرائنگ کو CPU پر 2–5 گنا اور ہارڈویئر ایکسلریشن کے ساتھ 10 گنا تک تیز کر سکتا ہے۔

تصاویر لوڈ کرنے کے لیے، CGImageSource استعمال کریں — GIF/APNG سے میٹا ڈیٹا، تھمب نیلز اور انفرادی فریم پڑھنے کے لیے ایک طاقتور API۔ CGImageSource ترتیبی لوڈنگ اور صرف ضروری حصوں کو حاصل کرنے کی اجازت دیتا ہے۔ بڑی تصاویر (اسکرین سائز سے بڑی) کے ساتھ کام کرتے وقت، ڈسک کیشنگ کے ساتھ CGImageSource بنانے اور چھوٹا ورژن دکھانے کے لیے CGImageSourceCreateThumbnailAtIndex استعمال کرنے کی سفارش کی جاتی ہے۔

swift
func createLayer(ctx: CGContext, size: CGSize) -> CGLayer? {
    guard let layer = CGLayer(ctx, size: size, auxiliaryInfo: nil) else { return nil }
    let layerCtx = layer.context !

    // ایک بار ڈرا کریں
    layerCtx.setFillColor(UIColor.lightGray.cgColor)
    layerCtx.addEllipse(in: CGRect(origin: .zero, size: size))
    layerCtx.fillPath()
    return layer
}

// draw() میں استعمال
for i in 0..<20 {
    ctx.draw(layer, at: CGPoint(x: CGFloat(i) * 30, y: 0))
}

Core Graphics کے ساتھ کوڈ کی مثال

آئیے Core Graphics استعمال کرتے ہوئے تصویر پر واٹر مارک دکھانے کے لیے ایک کسٹم View بنائیں۔ واٹر مارک میں شامل ہے اصل تصویر کے اوپر نیم شفاف متن اور ایک ویکٹر لوگو۔ کوڈ ایک ہی سیاق میں CGContext، CGImage، متن اور شفافیت کے ساتھ کام کو ظاہر کرتا ہے۔

swift
class WatermarkView: UIView {

    private let watermarkText = "IT Sectr"
    private let watermarkOpacity: CGFloat = 0.3

    override func draw(_ rect: CGRect) {
        guard let ctx = UIGraphicsGetCurrentContext() else { return }

        // پس منظر کی تصویر ڈرا کریں
        UIImage(named: "background")?.draw(in: rect)

        // واٹر مارک شفافیت ترتیب دیں
        ctx.saveGState()
        ctx.translateBy(x: rect.midX, y: rect.midY)
        ctx.rotate(by: -.pi / 6)

        // نیم شفاف متن
        let attributes: NSAttributedString.Attributes = [
            .font: UIFont.boldSystemFont(ofSize: 48),
            .foregroundColor: UIColor.white.withAlphaComponent(watermarkOpacity)
        ]
        let textSize = watermarkText.size(withAttributes: attributes)
        watermarkText.draw(
            at: CGPoint(x: -textSize.width / 2, y: -textSize.height / 2),
            withAttributes: attributes
        )

        // متن کے نیچے ویکٹر آئیکن (صلیب کے ساتھ دائرہ)
        ctx.setStrokeColor(UIColor.white.withAlphaComponent(watermarkOpacity).cgColor)
        ctx.setLineWidth(3)
        ctx.addEllipse(in: CGRect(x: -25, y: -75, width: 50, height: 50))
        ctx.strokePath()
        ctx.moveTo(x: -15, y: -50)
        ctx.addLineTo(x: 15, y: -50)
        ctx.moveTo(x: 0, y: -65)
        ctx.addLineTo(x: 0, y: -35)
        ctx.strokePath()

        ctx.restoreGState()
    }
}

کوڈ Core Graphics کی اہم صلاحیتوں کا استعمال کرتا ہے: پس منظر سے واٹر مارک اثرات کو الگ کرنے کے لیے saveGState/restoreGState، پوزیشننگ اور گردش کے لیے translateBy اور rotate، withAlphaComponent کے ذریعے نیم شفاف متن، اور addEllipse اور addLineTo کے ذریعے ویکٹر آئیکن۔ پورا واٹر مارک پس منظر کی تصویر کے بعد ایک کمپوزیشن کے طور پر کھینچا جاتا ہے۔

پروڈکشن میں تصاویر کے لیے واٹر مارک بناتے وقت کارکردگی پر غور کرنا ضروری ہے۔ اگر تصویر اسکرین سے بڑی ہے تو واٹر مارک لگانے سے پہلے CGImageSourceCreateThumbnailAtIndex کا استعمال کرتے ہوئے اسے چھوٹا کریں۔ Core Graphics تمام کارروائیاں CPU پر سنبھالتا ہے — درجنوں تصاویر کی بیچ پروسیسنگ کے لیے، UI کو بلاک کرنے سے بچنے کے لیے بیک گراؤنڈ قطار اور CGBitmapContext استعمال کریں۔

اکثر پوچھے گئے سوالات

Core Graphics UIKit سے کیسے مختلف ہے؟

UIKit ایک اعلیٰ سطح کا UI فریم ورک ہے جو ڈرائنگ کے لیے اندرونی طور پر Core Graphics استعمال کرتا ہے۔ Core Graphics 2D گرافکس کے لیے نچلی سطح کی C API ہے۔ UIKit معیاری عناصر کے لیے زیادہ آسان ہے، جبکہ Core Graphics ہر پکسل پر مکمل کنٹرول دیتا ہے۔

Metal کی بجائے Core Graphics کب استعمال کریں؟

Core Graphics جامد 2D گرافکس، چارٹ اور کسٹم UI عناصر کے لیے موزوں ہے۔ Metal 3D گرافکس، پیچیدہ اینیمیشنز اور GPU ایکسلریشن کے ساتھ بڑے پکسل اریوں کی پروسیسنگ کے لیے ہے۔ 95% UI کاموں کے لیے Core Graphics کافی ہے۔

CGImage کے ساتھ کام کرتے وقت میموری کیسے بچائیں؟

مکمل لوڈنگ کے بجائے createThumbnailAtIndex کے ذریعے تھمب نیلز لوڈ کرنے کے لیے CGImageSource استعمال کریں۔ بڑی تصاویر دکھانے کے لیے، ڈاؤن سیمپل آپشن کے ساتھ CGImage بنائیں۔ جب مزید ضرورت نہ ہو تو CGImageRelease کے ذریعے CGImage کو جاری کریں۔

کیا Core Graphics PDF کو سپورٹ کرتا ہے؟

ہاں، Core Graphics میں پڑھنے کے لیے CGPDFDocument اور PDF دستاویزات بنانے کے لیے CGPDFContext کے ذریعے مکمل PDF سپورٹ شامل ہے۔ آپ ویکٹر کو محفوظ رکھتے ہوئے کسی بھی CGContext مواد کو براہ راست PDF صفحہ پر کھینچ سکتے ہیں۔

ڈرائنگ کرتے وقت Retina کوالٹی کیسے یقینی بنائیں؟

Core Graphics اسکرین پر ڈرائنگ کرتے وقت خود بخود ڈیوائس ریزولوشن استعمال کرتا ہے۔ آف لائن سیاق و سباق کے لیے، scale = 0 (سسٹم اسکیل) کے ساتھ UIGraphicsBeginImageContextWithOptions استعمال کریں یا Retina/Retina HD کے لیے واضح طور پر 2.0/3.0 بتائیں۔

خلاصہ

  • Core Graphics CPU پر ویکٹر اور راسٹر رینڈرنگ کے لیے Apple کا بنیادی 2D فریم ورک ہے۔
  • CGContext مرکزی آبجیکٹ ہے جو اسٹیٹ اسٹیک اور ہدف آؤٹ پٹ ڈیوائس کا انتظام کرتا ہے۔
  • CGPath محفوظ کیشنگ اور تھریڈ محفوظ دوبارہ استعمال کے لیے ناقابل تبدیلی ویکٹر پاتھ فراہم کرتا ہے۔
  • CGGradient اور CGShading لکیری، ریڈیل اور فنکشنل گریڈینٹ بنانے کے لیے میکانزم فراہم کرتے ہیں۔
  • CGImage مختلف کلر اسپیس اور بٹ گہرائیوں کے سپورٹ کے ساتھ راسٹر امیجز فراہم کرتا ہے۔
  • CGLayer ایک آف لائن بفر ہے جو بار بار ڈرائنگ کو 2–5 گنا تیز کرتا ہے۔
  • Core Graphics UIKit، SwiftUI اور AppKit کی بنیاد کے طور پر کام کرتا ہے — iOS میں ہر دکھائی دینے والا عنصر اس سے گزرتا ہے۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں