QImage और QPixmap में क्या अंतर है?


84

मुझे समझ नहीं आ रहा है कि QImage और QPixmap में क्या अंतर है, वे समान कार्यक्षमता प्रदान करते हैं। मुझे QImage का उपयोग कब करना चाहिए और मुझे QPixmap का उपयोग कब करना चाहिए?


मुझे यकीन नहीं है कि अगर मैं आपके प्रश्न को समझता हूं, लेकिन मुझे लगा कि यह दस्तावेज़ीकरण में बहुत स्पष्ट था: "QImage को I / O के लिए डिज़ाइन और अनुकूलित किया गया है, और प्रत्यक्ष पिक्सेल पहुंच और हेरफेर के लिए, जबकि QPixmap को डिज़ाइन किया गया है और चित्र दिखाने के लिए अनुकूलित किया गया है स्क्रीन पर।" doc.qt.nokia.com/latest/qpixmap.html#details
cgmb

1
हाँ! मुझे यह पता चला था, लेकिन अच्छी तरह से समझ में नहीं आया, उदाहरण के लिए, I / O के लिए अनुकूलित और दिखाने के लिए अनुकूलित, यह अंतर मंच पर दिखाया गया एक अंतर है? ..क्या आप मुझे समझाने के लिए एक कदम बनाने में मदद कर सकते हैं .. धन्यवाद ..
Mr.Tu

मुझे अभी भी 100% यकीन नहीं है कि मुझे पता है कि आपका क्या मतलब है, लेकिन यदि आप QWidgets का उपयोग कर रहे हैं, तो आप इसे QLabel में प्रदर्शित कर सकते हैं। यदि आप QGraphicsView का उपयोग कर रहे हैं, तो आप इसे QGraphicsPixmapItem में प्रदर्शित कर सकते हैं। यदि आप QML का उपयोग कर रहे हैं, तो छवि तत्व आपके लिए सब कुछ संभाल लेगा।
cgmb

मैं इसे दूसरे तरीके से बताता हूं, इंजन क्या है, इसका काम क्या है? इसका उपयोग कब करें?
मि। टीटू

जवाबों:


55

Easilly पर डॉक्स को पढ़ कर दिए QImage और QPixmap :

QPixmap वर्ग एक है ऑफ स्क्रीन छवि प्रतिनिधित्व कि एक पेंट उपकरण के रूप में इस्तेमाल किया जा सकता।

QImage वर्ग एक हार्डवेयर स्वतंत्र छवि प्रतिनिधित्व कि पिक्सेल डेटा के लिए सीधी पहुँच की अनुमति देता है, और एक रंग उपकरण के रूप में इस्तेमाल किया जा सकता प्रदान करता है।

संपादित करें: इसके अलावा, @ डेव के उत्तर से:

आप GUI- थ्रेड के बाहर एक QPixmap में हेरफेर नहीं कर सकते, लेकिन QImage में ऐसा कोई प्रतिबंध नहीं है।

और @Annold से:

यहाँ एक छोटा सारांश है जो आमतौर पर (हमेशा नहीं) लागू होता है:

  • यदि आप एक छवि में हेरफेर करने की योजना बनाते हैं, तो इसे संशोधित करें, इस पर पिक्सल बदलें, आदि, एक क्यूमैज का उपयोग करें।
  • यदि आप स्क्रीन पर एक से अधिक बार एक ही छवि बनाने की योजना बनाते हैं, तो इसे QPixmap में परिवर्तित करें।

आपकी मदद के लिए धन्यवाद ... सामान्य प्रक्रिया क्या है कि QPixmpa और QImage एक तस्वीर लोड करते हैं .. यह स्मृति में क्या है .. धन्यवाद ..
Mr.Tu

मुझे यकीन नहीं है कि आप क्या करने की कोशिश कर रहे हैं, लेकिन इस प्रश्न में मैं दिखाता हूं कि डिस्क से YV12 डेटा को कैसे लोड किया जाए, GLSL टुकड़े टुकड़े करने वाले का उपयोग करके RGB में कनवर्ट करें, और फिर इसे QImage के अंदर स्क्रीन पर प्रदर्शित करें। मुझे लगता है कि मैं आपको सही दिशा में इंगित कर सकता हूं यदि आप इस बारे में अधिक स्पष्ट थे कि आप क्या हासिल करने की कोशिश कर रहे हैं।
कार्लफिलिप

14
क्या यह वास्तव में कुछ भी जवाब देता है?
स्पिंकस

7
बस प्रलेखन और दूसरों के जवाब की नकल करने का कोई मतलब नहीं है।
वायाचेस्लाव क्रिलोव

48

क्यूटी लैब्स पर लेखों की एक अच्छी श्रृंखला है जो क्यूटी ग्राफिक्स सिस्टम के बारे में बहुत कुछ बताती है। इस लेख में विशेष रूप से QImageबनाम पर एक खंड है QPixmap

यहाँ एक छोटा सारांश है जो आमतौर पर (हमेशा नहीं) लागू होता है:

  • यदि आप एक छवि में हेरफेर करने की योजना बनाते हैं, तो इसे संशोधित करें, इस पर पिक्सेल बदलें, आदि, का उपयोग करें QImage
  • यदि आप स्क्रीन पर एक से अधिक बार एक ही छवि बनाने की योजना बनाते हैं, तो इसे a में बदलें QPixmap

धन्यवाद। यह मार्ग हमें बताता है: चित्र, रेखापुंज और ओपनजीएल को लोड करने के दो अलग-अलग तरीके हैं? सही है?
मि। टीटू

मैं सवाल को काफी नहीं समझता। न तो "रेखापुंज" और न ही "ओपनजीएल" विशेष रूप से एक तस्वीर को लोड करने के तरीकों का प्रतिनिधित्व करते हैं।
अर्नोल्ड स्पेंस

37

एक महत्वपूर्ण अंतर यह है कि आप किसी QPixmapभी चीज़ पर मुख्य GUI थ्रेड को बना या हेरफेर नहीं कर सकते हैं । हालाँकि, आप QImageबैकग्राउंड थ्रेड्स पर इंस्टेंस बना सकते हैं और उनमें फेरबदल कर सकते हैं और फिर उन्हें GUI थ्रेड में वापस भेजने के बाद कन्वर्ट कर सकते हैं।


22

औद्योगिक वातावरण में महत्वपूर्ण:

QPixmap प्रदर्शन करने वाले वीडियो कार्ड पर संग्रहीत है। QImage नहीं।

इसलिए यदि आपके पास एक सर्वर है जो एप्लिकेशन चला रहा है, और एक क्लाइंट स्टेशन जो प्रदर्शन कर रहा है, तो यह नेटवर्क उपयोग की अवधि में बहुत महत्वपूर्ण है।

Pixmap के साथ, एक Redraw में नेटवर्क पर केवल redraw (कुछ बाइट्स) के लिए ऑर्डर भेजने में शामिल होता है।

QImage के साथ, यह पूरी छवि (कुछ एमबी के आसपास) भेजने में शामिल है।


19
  • QPixmap एक "छवि वस्तु" है जिसका pixelप्रतिनिधित्व आपके कोड में कोई परिणाम नहीं है, इस प्रकार QPixmap को प्रदर्शन स्क्रीन पर चित्र प्रदान करने के लिए डिज़ाइन और अनुकूलित किया गया है , यह X11 का उपयोग करते समय XServer पर संग्रहीत किया जाता है, इस प्रकार XWindow पर QPixmap को खींचना ड्राइंग की तुलना में बहुत तेज़ है। QImages, जैसा कि डेटा पहले से ही सर्वर पर है, और उपयोग करने के लिए तैयार है।

    QPixmap का उपयोग कब करें : यदि आप किसी मौजूदा छवि (आइकन .. पृष्ठभूमि .. आदि) को विशेष रूप से बार-बार खींचना चाहते हैं, तो Qixixmap का उपयोग करें।

  • QImage क्लाइंट कोड की "मेमोरी में पिक्सेल की एक सरणी" है , QImage को I / O के लिए डिज़ाइन किया गया है और प्रत्यक्ष पिक्सेल एक्सेस और हेरफेर के लिए अनुकूलित किया गया है।

    QImage का उपयोग कब करें : यदि आप Qpaint के साथ ड्रा करना चाहते हैं, या एक छवि पिक्सेल में हेरफेर करते हैं।

  • QBitmap केवल एक सुविधाजनक QPixmap उपवर्ग है जो 1 की गहराई सुनिश्चित करता है, इसकी मोनोक्रोम (1-बिट गहराई) Pixmap है। QPixmap की तरह, QBitmap अंतर्निहित डेटा साझाकरण के उपयोग के लिए अनुकूलित है।

  • QPicture एक पेंट डिवाइस है जो QPainter कमांड को रिकॉर्ड करता है और रिप्ले करता है - आपकी ड्राइंग -
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.