我正在做一个简单的益智游戏。该作品是一个正方形,它包含图像的相应部分。我需要做的是将形状从正方形更改为普通拼图形状。我已经在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);
答案 0 :(得分:0)
您应该改用setAlphaChannel
。蒙版只有0和1的值,而Alpha通道应允许256种透明度变化。