【发布时间】:2019-04-01 07:29:56
【问题描述】:
我正在制作一个简单的益智游戏。这块是一个正方形,它包含图像的相应部分。我需要做的是将形状从正方形更改为常见的拼图形状。我在 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);
【问题讨论】: