QPixmap具有透明部分

时间:2018-10-28 00:08:50

标签: c++ qt

我正在做一个简单的益智游戏。该作品是一个正方形,它包含图像的相应部分。我需要做的是将形状从正方形更改为普通拼图形状。我已经在Photoshop中制作了一个模板:

角片

现在,我需要以某种方式将其用作蒙版,以更改方形的形状。我尝试了以下方法:

QImage temp;
temp.load("://Templates/c1.png");
temp = temp.convertToFormat(QImage::Format_Mono);
QBitmap bit;
bit = QBitmap::fromImage(temp);
puz->img.setMask(bit);

puzzle->img是我的正方形。它可以工作,但是连接器出现“毛刺”。我想所有半透明的像素都会完全充满一种颜色(或完全透明?),所以这就是为什么它看起来不光滑的原因。

有没有办法使它更流畅?

更新:我尝试了一种不同的方法:由于setAlphaChannel()是一个过时的函数,文档说明我需要使用QPainter::CompositionMode。我尝试了以下

void puzzle::paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget )
{
   painter->setCompositionMode(QPainter::CompositionMode_Source);
   painter->fillRect(x, y, 90, 90, Qt::transparent);
   painter->setCompositionMode(QPainter::CompositionMode_SourceOver);
   painter->drawPixmap(x, y, 90, 90, img);
   painter->setCompositionMode(QPainter::CompositionMode_DestinationIn);
   painter->drawImage(x,y, mask);
}

它的工作原理类似于Image Composition example,但是在我的项目Output中,我得到了黑色像素而不是透明像素。不知道怎么了。 mask初始化:

mask.load("://Templates/c1.png");
mask = mask.scaled(90, 90, Qt::KeepAspectRatio, Qt::SmoothTransformation);
mask = mask.convertToFormat(QImage::Format_ARGB32_Premultiplied);

1 个答案:

答案 0 :(得分:0)

您应该改用setAlphaChannel。蒙版只有0和1的值,而Alpha通道应允许256种透明度变化。