我使用以下代码在圆圈中绘制图像。
QPixmap target(110, 130); // the size may vary
target.fill(Qt::transparent);
QPixmap p = QPixmap::fromImage( QImage(":/Images/head").scaled(110,110,Qt::IgnoreAspectRatio,Qt::SmoothTransformation).convertToFormat(QImage::Format_ARGB32));
QPainter painter(&target);
painter.setRenderHint(QPainter::Antialiasing);
painter.setRenderHint(QPainter::Antialiasing, true);
QRegion r(QRect(10,10,100,100), QRegion::Ellipse);
painter.setClipRegion(r);
painter.drawPixmap(0, 0,p);
ui->label->setPixmap(target);
这是我得到的输出
请注意圆圈不平滑。我的问题是如何让这个圆圈顺利进行。
答案 0 :(得分:3)
使用剪辑路径在绘图时不具备抗锯齿能力。
您可以使用蒙版图像或制作彩色蒙版图像,将图像绘制为特殊形状。
这是一个简单的例子:
QPainter *painter....
QPixmap pixmapToDraw....
....
QImage dst(sourceRect.width(), sourceRect.height(), QImage::Format_ARGB32);
dst.fill(QColor(0, 0, 0, 0));
QPainter p(&dst);
QPainterPath path;
path.addRoundedRect(0, 0, sourceRect.width(), sourceRect.height(), sourceRect.width() / 2, sourceRect.height() / 2);
p.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform, true);
p.fillPath(path, QBrush(Qt::white));
p.setCompositionMode(QPainter::CompositionMode_SourceAtop);
p.drawPixmap(dst.rect(), pixmapToDraw);
painter->drawImage(0, 0, dst);