मेरे पास एक पीएनजी से पारदर्शिता के साथ एक आकृति (नीले रंग में) भरी हुई है:
फिर मैं इस आकृति के ऊपर (लाल रंग में) QPainter::drawEllipse
के साथ कई वृत्त बना रहा हूं।
इसका परिणाम कुछ हद तक तीसरी तस्वीर के समान है जिसमें लाल आकार पूरी तरह से नीले रंग को कवर करता है:
हालांकि मैं जो चाहता हूं वह नीले रंग के आकार के लिए लाल रंग के मुखौटे के रूप में कार्य करने के लिए है, जिसके परिणामस्वरूप:
क्या QPainter के साथ ऐसा करना संभव है?
1 उत्तर
यह संभव है। मान लें कि आप अपने पीएनजी को QImage में लोड कर रहे हैं, आप अपनी छवि से मुखौटा बनाने के लिए ऐसा कुछ कर सकते हैं:
QImage img("your.png");
QPixmap mask = QPixmap::fromImage(img.createAlphaMask());
अन्य विकल्पों के लिए QImage में create*Mask
फ़ंक्शन देखें।
फिर यह चित्रकार के क्लिप क्षेत्र को सेट करने का एक साधारण मामला है:
QPainter p(this);
p.setClipRegion(QRegion(mask));
यहां एक बेवकूफ डेमो है (उस कोड का उपयोग न करें, छवि लोडिंग, मुखौटा और क्षेत्र निर्माण को कैश किया जाना चाहिए, वे संभावित रूप से महंगे हैं):
#include <QtGui>
class W: public QWidget
{
Q_OBJECT
public:
W(): QWidget(0) { }
protected:
void paintEvent(QPaintEvent *)
{
QPainter p(this);
QImage img("../back.png");
QPixmap mask = QPixmap::fromImage(img.createAlphaMask());
// draw the original image on the right
p.drawImage(300, 0, img);
// draw some ellipses in the middle
p.setBrush(Qt::red);
for (int i=0; i<100; i+=10)
p.drawEllipse(i+150, i, 20, 70);
// and do the same thing, but with the mask active
p.setClipRegion(QRegion(mask));
for (int i=0; i<100; i+=10)
p.drawEllipse(i, i, 20, 70);
}
};
जो कुछ इस तरह पैदा करता है:
संबंधित सवाल
नए सवाल
qt
Qt एक क्रॉस-प्लेटफ़ॉर्म एप्लिकेशन डेवलपमेंट फ्रेमवर्क है जो व्यापक रूप से एप्लिकेशन सॉफ़्टवेयर के विकास के लिए उपयोग किया जाता है जो कि विभिन्न सॉफ़्टवेयर और हार्डवेयर प्लेटफ़ॉर्म पर चलाए जा सकते हैं, जिसमें अंतर्निहित कोडबेस में बहुत कम या कोई परिवर्तन नहीं होता है, जबकि देशी अनुप्रयोगों की शक्ति और गति होती है। Qt कमर्शियल और ओपन सोर्स लाइसेंस दोनों के साथ उपलब्ध है।
#include <QBitmap>
की जरूरत है