网上很多提供的代码里都是通过绘制圆角矩形蒙板来实现圆形头像,但是我自己试了下绘制的边缘存在锯齿,即使设置了消锯齿也没有作用。后面试下了下绘制椭圆 drawEllipse的方法,效果还可以,但是要注意的是绘制的宽和高必须和源图片一致。
为了实现圆形头像,势必要对原图进行crop或者resize,我这里是取了原图宽高中的较小值,在原图上加完蒙板后,进行了scaled
static QPixmap PixmapToRound(QPixmap &src)
{
if (src.isNull()) {
return QPixmap();
}
int radius = src.width() > src.height() ? src.height() : src.width();
QSize size(src.width(), src.height());
QSize size2(radius * 2, radius * 2);
QBitmap mask(size);
QPainter painter(&mask);
painter.setRenderHints(QPainter::SmoothPixmapTransform);//消锯齿
painter.setRenderHints(QPainter::Antialiasing);
painter.setRenderHints(QPainter::TextAntialiasing);
painter.translate(0, 0);
//painter.setRenderHint(QPainter::SmoothPixmapTransform);
painter.fillRect(0, 0, size.width(), size.height(), Qt::white);
painter.setBrush(QColor(0, 0, 0));
painter.drawEllipse(0, 0, size.width(), size.height());
src.setMask(mask);
QPixmap image = src.scaled(size2);
}