Android में Matrix: यह क्या है, मैट्रिक्स के प्रकार और ट्रांसफ़ॉर्मेशन के साथ कार्य

लेखक: IT Sectr प्रकाशित: 2026-07-22 पढ़ने का समय: 9 मिनट

Matrix — Android SDK (android.graphics.Matrix) का एक वर्ग है जो 3×3 मैट्रिक्स के माध्यम से एफ़ाइन ट्रांसफ़ॉर्मेशन का प्रतिनिधित्व करता है। इसका उपयोग ग्राफ़िक ऑब्जेक्ट्स — स्थानांतरण, स्केलिंग, घूर्णन और तिरछा करने के लिए किया जाता है। Android Developers Documentation (2026) के अनुसार, Matrix कैनवस, बिटमैप और ड्रॉएबल में ट्रांसफ़ॉर्मेशन के लिए मुख्य उपकरण है, जो कस्टम ड्रॉइंग में सटीक समन्वय नियंत्रण प्रदान करता है।

मुख्य बिंदु

  • Matrix — 3×3 मैट्रिक्स के साथ एफ़ाइन और परिप्रेक्ष्य ट्रांसफ़ॉर्मेशन के लिए Android वर्ग
  • एफ़ाइन संचालन: translate (स्थानांतरण), scale (स्केलिंग), rotate (घूर्णन) और skew (तिरछा)
  • Matrix setPolyToPoly के माध्यम से प्रोजेक्टिव ट्रांसफ़ॉर्मेशन का समर्थन करता है
  • संचालन का क्रम महत्वपूर्ण है — Matrix.concat अनुक्रमिक गुणन करता है
  • Matrix Android ग्राफ़िक्स में Canvas, Bitmap, RectF, PointF और Path पर लागू होता है

Android में Matrix क्या है?

Matrix (android.graphics.Matrix) — Android SDK का एक वर्ग है जो द्वि-आयामी निर्देशांकों को बदलने के लिए उपयोग की जाने वाली गणितीय 3×3 मैट्रिक्स का प्रतिनिधित्व करता है। Matrix Android में सभी ग्राफ़िक ट्रांसफ़ॉर्मेशन के लिए मूलभूत निर्माण खंड है — Canvas की गति और स्केलिंग से लेकर Bitmap की जटिल परिप्रेक्ष्य विकृतियों तक।

iOS के विपरीत, जो अलग-अलग CGAffineTransform (एफ़ाइन) और CATransform3D (3D) संरचनाओं का उपयोग करता है, Android एफ़ाइन और परिप्रेक्ष्य ट्रांसफ़ॉर्मेशन को एक ही Matrix वर्ग में जोड़ता है। 3×3 मैट्रिक्स मानक एफ़ाइन संचालन (अंतिम पंक्ति [0, 0, 1]) और परिप्रेक्ष्य विकृतियों दोनों का प्रतिनिधित्व करने की अनुमति देता है जब अंतिम पंक्ति में मनमाने मान होते हैं। यह अधिक लचीलापन प्रदान करता है लेकिन मैट्रिक्स गणित की समझ की आवश्यकता होती है।

Matrix Canvas API के साथ गहराई से एकीकृत है। जब डेवलपर canvas.translate(), canvas.scale() या canvas.rotate() को कॉल करता है, तो ये विधियाँ आंतरिक रूप से ग्राफ़िक संदर्भ की मैट्रिक्स को संशोधित करती हैं। canvas.getMatrix() के माध्यम से वर्तमान Canvas मैट्रिक्स प्राप्त किया जा सकता है और canvas.setMatrix() या canvas.concat() के माध्यम से मैन्युअल रूप से कस्टम मैट्रिक्स लागू किया जा सकता है।

Matrix ट्रांसफ़ॉर्मेशन के प्रकार

Matrix चार बुनियादी प्रकार के एफ़ाइन ट्रांसफ़ॉर्मेशन का समर्थन करता है: translate, scale, rotate, skew (तिरछा)। प्रत्येक प्रकार में प्री-गुणन (pre), पोस्ट-गुणन (post) और सेट (set) के लिए विधियाँ हैं। preTranslate और postTranslate के बीच अंतर मैट्रिक्स गुणन के क्रम में है, जो संचालन के संयोजन पर अंतिम ट्रांसफ़ॉर्मेशन को प्रभावित करता है।

संचालनविधिपैरामीटरविवरण
स्थानांतरणsetTranslate / preTranslate / postTranslatedx, dyX और Y अक्षों के साथ विस्थापन
स्केलिंगsetScale / preScale / postScalesx, sy, px, pyपिवट बिंदु के साथ स्केलिंग
घूर्णनsetRotate / preRotate / postRotatedegrees, px, pyपिवट बिंदु के चारों ओर घूर्णन
तिरछाsetSkew / preSkew / postSkewkx, kyअक्षों के साथ झुकाव (कतरनी)

स्थानांतरण — गति

Translate सभी बिंदुओं की स्थिति को दिए गए विस्थापन dx, dy से बदलता है। धनात्मक dx दाईं ओर खिसकाता है, dy — नीचे की ओर (Android स्क्रीन समन्वय प्रणाली में, Y अक्ष नीचे की ओर इंगित करता है)। Translate वस्तु के आकार को नहीं बदलता — केवल उसकी स्थिति को। यह तत्वों को स्थापित करने के लिए सबसे सरल और सबसे अधिक उपयोग किया जाने वाला संचालन है।

स्केलिंग — आकार बदलना

Scale किसी वस्तु का आकार गुणांक sx (X के अनुदिश) और sy (Y के अनुदिश) से बदलता है। पैरामीटर px, py स्केलिंग का पिवट बिंदु निर्दिष्ट करते हैं। यदि px, py निर्दिष्ट नहीं हैं, तो स्केलिंग मूल बिंदु (0, 0) के सापेक्ष की जाती है। जब sx = sy, वस्तु समान रूप से स्केल होती है। ऋणात्मक मान प्रतिबिंब बनाते हैं।

घूर्णन — घुमाना

Rotate किसी वस्तु को पिवट बिंदु (px, py) के चारों ओर दिए गए कोण (डिग्री में) पर घुमाता है। धनात्मक डिग्री मान दक्षिणावर्त घूर्णन के अनुरूप होते हैं (iOS/macOS के विपरीत, जहाँ धनात्मक कोण वामावर्त होता है)। यदि px, py निर्दिष्ट नहीं हैं, तो घूर्णन मूल बिंदु के चारों ओर किया जाता है।

तिरछा — झुकाव

Skew (कतरनी) किसी वस्तु को X अक्ष (kx) या Y अक्ष (ky) के अनुदिश झुकाकर विकृत करता है। मान 1.0 45 डिग्री पर झुकाता है। Skew का उपयोग झुकाव प्रभाव, छद्म-3D दृश्य और परिप्रेक्ष्य विकृति बनाने के लिए किया जाता है।

3×3 मैट्रिक्स की संरचना

Matrix अपने 3×3 तत्वों को 9 फ़्लोटिंग-पॉइंट मानों (float[9]) की आंतरिक सरणी में संग्रहीत करता है। भंडारण क्रम कॉलम-मेजर (column-major) है, जो मानक गणितीय प्रतिनिधित्व के अनुरूप है। अलग-अलग तत्वों तक पहुँच स्थिरांक के माध्यम से की जाती है: Matrix.MSCALE_X, Matrix.MSKEW_Y, Matrix.MTRANS_X इत्यादि।

मैट्रिक्स के तत्व

मैट्रिक्स निम्नानुसार व्यवस्थित है: पहले दो कॉलम (MSCALE_X, MSKEW_X, MSKEW_Y, MSCALE_Y) स्केलिंग, घूर्णन और तिरछा करने के लिए जिम्मेदार हैं। तीसरा कॉलम (MTRANS_X, MTRANS_Y, MPERSP_2) स्थानांतरण और परिप्रेक्ष्य के लिए जिम्मेदार है। एफ़ाइन ट्रांसफ़ॉर्मेशन के लिए, MPERSP_0 और MPERSP_1 0 हैं, और MPERSP_2 1 है।

मैट्रिक्स मान प्राप्त करने के लिए, getValues(float[] values) का उपयोग करें, जो 9 तत्वों की एक सरणी भरता है। उन्हें सेट करने के लिए, setValues(float[] values) का उपयोग करें। यह मानक translate, scale, rotate और skew विधियों से परे जटिल कस्टम ट्रांसफ़ॉर्मेशन के लिए मैट्रिक्स में प्रत्यक्ष हेरफेर की अनुमति देता है।

मैट्रिक्स प्रकार की जाँच

Matrix वर्तमान स्थिति को वर्गीकृत करने के लिए कई विधियाँ प्रदान करता है। isIdentity() जाँचता है कि मैट्रिक्स पहचान मैट्रिक्स है या नहीं। isAffine() जाँचता है कि इसमें केवल एफ़ाइन ट्रांसफ़ॉर्मेशन हैं (MPERSP_0 = 0, MPERSP_1 = 0, MPERSP_2 = 1)। ये जाँच अनुकूलन के लिए उपयोगी हैं: यदि मैट्रिक्स पहचान है, तो ट्रांसफ़ॉर्मेशन को छोड़ा जा सकता है।

Matrix के साथ बुनियादी संचालन

Matrix संचालन की कई श्रेणियों का समर्थन करता है: सेट (set), प्री-गुणन (pre), पोस्ट-गुणन (post), संयोजन (concat), व्युत्क्रम (invert) और मैपिंग (map)। प्रत्येक श्रेणी जटिल ट्रांसफ़ॉर्मेशन बनाते समय अपने उद्देश्य की पूर्ति करती है।

Pre और Post संचालन

preTranslate वर्तमान मैट्रिक्स को बाईं ओर से स्थानांतरण मैट्रिक्स से गुणा करता है: result = translate × current. postTranslate दाईं ओर से गुणा करता है: result = current × translate. अंतर आवेदन के क्रम में है: pre-संचालन वर्तमान ट्रांसफ़ॉर्मेशन से पहले लागू होते हैं, post-संचालन बाद में। यही preScale, postScale, preRotate, postRotate और preSkew, postSkew पर भी लागू होता है।

व्युत्क्रम और संयोजन

invert(Matrix inverse) व्युत्क्रम मैट्रिक्स की गणना करता है। यदि मूल मैट्रिक्स एकवचन (सारणिक शून्य) है, तो false लौटाता है। concat(Matrix other) वर्तमान मैट्रिक्स को दिए गए मैट्रिक्स से गुणा करता है: set = set × other. उल्टे क्रम के लिए, setConcat(other, this) का उपयोग करें।

Map — बिंदुओं और आयतों पर लागू करना

mapRect(RectF rect) एक आयत को रूपांतरित करता है और परिणाम एक नए RectF में लौटाता है। mapPoints(float[] dst, float[] src) बिंदुओं की एक सरणी को रूपांतरित करता है। mapVectors(float[] dst, float[] src) सदिशों को रूपांतरित करता है — स्थानांतरण को ध्यान में रखे बिना। mapRect ट्रांसफ़ॉर्मेशन के बाद बाउंडिंग बॉक्स की गणना के लिए उपयोगी है।

Canvas और Bitmap में अनुप्रयोग

Matrix का सक्रिय रूप से दो प्रमुख Android ग्राफ़िक्स परिदृश्यों में उपयोग किया जाता है: Canvas ट्रांसफ़ॉर्मेशन और Bitmap ट्रांसफ़ॉर्मेशन। दोनों मामलों में, Matrix यह निर्धारित करता है कि ग्राफ़िक आउटपुट कैसे संशोधित किया जाएगा।

Matrix के माध्यम से Canvas ट्रांसफ़ॉर्मेशन

Canvas वर्तमान मैट्रिक्स के पूर्ण प्रतिस्थापन के लिए canvas.setMatrix(matrix) और वर्तमान ट्रांसफ़ॉर्मेशन को दिए गए मैट्रिक्स से गुणा करने के लिए canvas.concat(matrix) प्रदान करता है। Matrix लागू करने के बाद, सभी बाद की ड्राइंग — drawBitmap, drawRect, drawPath कॉल — रूपांतरित समन्वय प्रणाली में की जाती है। Canvas save() और restore() के माध्यम से अपना स्वयं का सहेजा गया स्टेट स्टैक भी बनाए रखता है।

Matrix के माध्यम से Bitmap ट्रांसफ़ॉर्मेशन

Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height, Matrix matrix, boolean filter) दिए गए ट्रांसफ़ॉर्मेशन को लागू करके एक नया Bitmap बनाता है। यह मूल Bitmap को खोए बिना स्केल की गई, घुमाई गई या विकृत छवि प्रतियाँ बनाने के लिए एक शक्तिशाली उपकरण है। पैरामीटर filter पिक्सेल इंटरपोलेशन के दौरान एंटी-अलियासिंग को नियंत्रित करता है।

setPolyToPoly — परिप्रेक्ष्य ट्रांसफ़ॉर्मेशन

setPolyToPoly(float[] src, int srcIndex, float[] dst, int dstIndex, int pointCount) — Matrix की एक अद्वितीय क्षमता जिसका CGAffineTransform में कोई सीधा समकक्ष नहीं है। यह एक मैट्रिक्स की गणना करता है जो दिए गए बिंदुओं को एक बहुभुज से दूसरे में रूपांतरित करता है। pointCount = 4 के साथ, एक पूर्ण परिप्रेक्ष्य (प्रोजेक्टिव) ट्रांसफ़ॉर्मेशन बनाया जाता है, जो परिप्रेक्ष्य विकृति के साथ Bitmap ओवरले की अनुमति देता है।

Kotlin में कोड उदाहरण

आइए Kotlin के साथ Android एप्लिकेशन में ग्राफ़िक्स ट्रांसफ़ॉर्मेशन के लिए Matrix के उपयोग के व्यावहारिक उदाहरण देखें।

बुनियादी एफ़ाइन ट्रांसफ़ॉर्मेशन

उदाहरण एक संयुक्त ट्रांसफ़ॉर्मेशन के लिए Matrix बनाता है: (100, 50) से स्थानांतरण, 1.5x स्केलिंग और 45 डिग्री घूर्णन। preRotate और preScale के बाद postTranslate का उपयोग संचालन के क्रम को बदलता है।

kotlin
val matrix = Matrix()
matrix.preScale(1.5f, 1.5f)
matrix.preRotate(45f)
matrix.postTranslate(100f, 50f)

// बिंदुओं पर लागू करना
val pts = floatArrayOf(0f, 0f, 100f, 100f)
matrix.mapPoints(pts)

// आयत पर लागू करना
val rect = RectF(0f, 0f, 200f, 100f)
matrix.mapRect(rect)

save और restore के साथ Canvas ट्रांसफ़ॉर्मेशन

उदाहरण एक वृत्त को उसके केंद्र के चारों ओर घुमाने और स्केल करने के लिए onDraw में Canvas पर Matrix लागू करना प्रदर्शित करता है। Canvas स्थिति को सहेजना और पुनर्स्थापित करना सुनिश्चित करता है कि ट्रांसफ़ॉर्मेशन बाद के ड्राइंग तत्वों को प्रभावित न करे।

kotlin
override fun onDraw(canvas: Canvas) {
    super.onDraw(canvas)

    val cx = width / 2f
    val cy = height / 2f
    val radius = 100f

    canvas.save()
    val matrix = Matrix()
    matrix.postTranslate(cx, cy)
    matrix.postRotate(30f)
    matrix.postScale(1.2f, 1.2f)
    canvas.concat(matrix)

    val paint = Paint().apply {
        color = Color.BLUE
        style = Paint.Style.FILL
    }
    canvas.drawCircle(0f, 0f, radius, paint)
    canvas.restore()
}

setPolyToPoly के माध्यम से परिप्रेक्ष्य विकृति

उदाहरण Bitmap की परिप्रेक्ष्य विकृति बनाने के लिए setPolyToPoly का उपयोग करता है। चार स्रोत बिंदु (मूल आयत के कोने) चार लक्ष्य बिंदुओं पर मैप किए जाते हैं जो एक समलंब बनाते हैं। परिणाम अंतरिक्ष में झुकी हुई छवि का प्रभाव है।

kotlin
fun applyPerspective(
    bitmap: Bitmap,
    skew: Float
): Bitmap {
    val w = bitmap.width.toFloat()
    val h = bitmap.height.toFloat()

    val src = floatArrayOf(0f, 0f, w, 0f,
                         0f, h, w, h)
    val dst = floatArrayOf(skew, 0f, w - skew, 0f,
                         0f, h, w, h)

    val matrix = Matrix()
    matrix.setPolyToPoly(src, 0, dst, 0, 4)

    return Bitmap.createBitmap(
        bitmap, 0, 0,
        w.toInt(), h.toInt(),
        matrix, true
    )
}

अक्सर पूछे जाने वाले प्रश्न

Android में Matrix और Camera में क्या अंतर है?

Matrix एकल 3×3 मैट्रिक्स के माध्यम से द्वि-आयामी एफ़ाइन और परिप्रेक्ष्य ट्रांसफ़ॉर्मेशन के साथ काम करता है। Camera (android.graphics.Camera) एक उच्च-स्तरीय वर्ग है जो त्रि-आयामी कैमरे का अनुकरण करता है: यह 3D घूर्णन बनाता है और फिर परिणाम को 2D Matrix में प्रोजेक्ट करता है। Camera आंतरिक रूप से Matrix का उपयोग करता है।

Bitmap को 90 डिग्री कैसे घुमाएँ?

postRotate(90f) के साथ एक Matrix बनाएँ और इसे Bitmap.createBitmap(original, 0, 0, w, h, matrix, true) में पास करें। ध्यान दें कि 90 डिग्री घुमाने पर, परिणाम की चौड़ाई और ऊँचाई आपस में बदल जाती है। मनमाने कोण पर घूर्णन के लिए, खाली क्षेत्रों से बचने के लिए क्रॉपिंग की आवश्यकता हो सकती है।

Matrix का व्युत्क्रम ट्रांसफ़ॉर्मेशन कैसे प्राप्त करें?

matrix.invert(resultMatrix) का उपयोग करें। विधि true लौटाती है यदि व्युत्क्रम सफल होता है और व्युत्क्रम मैट्रिक्स को resultMatrix में लिखती है। यदि मैट्रिक्स एकवचन है (उदाहरण के लिए, शून्य स्केल पर) तो व्युत्क्रम असंभव हो सकता है। हमेशा वापसी मान की जाँच करें।

pre और post संचालन में क्या अंतर है?

pre नए ट्रांसफ़ॉर्मेशन को बाईं ओर से गुणा करता है: result = operation × current — संचालन वर्तमान से पहले लागू होता है। post दाईं ओर से गुणा करता है: result = current × operation — संचालन बाद में लागू होता है। preRotate + postTranslate अनुक्रम के लिए: पहले घूर्णन, फिर स्थानांतरण।

क्या Compose में Matrix का उपयोग किया जा सकता है?

हाँ, Matrix का उपयोग Jetpack Compose में Canvas Compose के साथ सहभागिता में android.graphics.Matrix वर्ग के माध्यम से किया जाता है। Compose में, ट्रांसफ़ॉर्मेशन (scale, rotationX, translationX और अन्य) के लिए graphicsLayer उपलब्ध है, लेकिन जटिल Bitmap ट्रांसफ़ॉर्मेशन के लिए, drawWithContent या drawBehind कोड में Matrix का उपयोग किया जाता है।

सारांश

  • Matrix — 3×3 मैट्रिक्स के साथ एफ़ाइन और परिप्रेक्ष्य ट्रांसफ़ॉर्मेशन के लिए Android वर्ग
  • चार बुनियादी प्रकार: translate, scale, rotate, skew
  • pre/post संचालन आवेदन क्रम को नियंत्रित करते हैं: pre — वर्तमान से पहले, post — वर्तमान ट्रांसफ़ॉर्मेशन के बाद
  • setPolyToPoly — 4 बिंदु जोड़ों से परिप्रेक्ष्य ट्रांसफ़ॉर्मेशन की गणना के लिए अद्वितीय फ़ंक्शन
  • Matrix Canvas पर concat के माध्यम से, Bitmap पर Matrix के साथ createBitmap के माध्यम से, बिंदुओं पर mapPoints के माध्यम से लागू होता है
  • invert व्युत्क्रम ट्रांसफ़ॉर्मेशन की गणना करता है, एकवचन मैट्रिक्स के लिए false लौटाता है
  • isAffine और isIdentity अनुकूलन के लिए मैट्रिक्स स्थिति को वर्गीकृत करने में मदद करते हैं

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें