可能です。あなたはQImageのにあなたのPNGをロードしていると仮定すると、あなたのイメージからマスクを作成するには、このような何かを行うことができます。
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);
}
};
:便利なサンプルコードについて
出典
2011-09-24 14:03:53
Mat
どうもありがとうと+1を。 –