#include<QPainter>
QPixmap getRoundImage(const QPixmap& src, QPixmap &mask, QSize maskSize)
{
if (maskSize == QSize(0, 0))
{
maskSize = mask.size();
}
else
{
// Qt::KeepAspectRatio , 缩放时, 尽可能以大的矩形缩放
// Qt::SmoothTransformation , 平滑方式
mask = mask.scaled(maskSize,Qt::KeepAspectRatio, Qt::SmoothTransformation);
}
//保存转换后的头像
// QImage::Format_ARGB32_Premultiplied 格式, 获取的头像会比较清晰
QImage resultImage(maskSize, QImage::Format_ARGB32_Premultiplied);
//CompositionMode,图片的叠加模式
QPainter painter(&resultImage); //定义一个画家画resultImage
painter.setCompositionMode(QPainter::CompositionMode_Source);//设置图片叠加模式,将源文件以复制进行操作,source将源文件直接拷贝过来
painter.fillRect(resultImage.rect(), Qt::transparent);//填充矩形,矩形的大小就是图片的大小,同时是透明的transparent
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);//用source_over方式进行叠加
painter.drawPixmap(0,0,mask);
painter.setCompositionMode(QPainter::CompositionMode_SourceIn);//用SoureceIn方式进行叠加
painter.drawPixmap(0,0,src.scaled(maskSize,Qt::KeepAspectRatio, Qt::SmoothTransformation));//对目标的QQ头像,进行比例设置
painter.end();
return QPixmap::fromImage(resultImage);
}