图像和掩码图像,生成一个圆形图像"/>
根据指定的原始图像和掩码图像,生成一个圆形图像
QPixmap BasicWindow::getRoundImage(const QPixmap &src, QPixmap &mask, QSize maskSize)
{if (maskSize == QSize(0, 0))//如果是00 就用空的尺寸大小{maskSize = mask.size();}else {//KeepAspectRatio尽可能大的矩形进行缩放 SmoothTransformation装换的模式 平滑mask = mask.scaled(maskSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);//根据尺寸大小进行缩放}//保存转换后的图像QImage resultImage(maskSize, QImage::Format_ARGB32_Premultiplied);//格式进行转换 这样转换后的图像会比较清晰QPainter painter(&resultImage);//用结果图像进行初始化//设置图片叠加模式 CompositionMode_Source将原图像用复制的方式进行操作painter.setCompositionMode(QPainter::CompositionMode_Source);//输出圆头像的像素painter.fillRect(resultImage.rect(), Qt::transparent);//填充矩形 是透明分painter.setCompositionMode(QPainter::CompositionMode_SourceOver);//painter.drawPixmap(0, 0, mask);//画painter.setCompositionMode(QPainter::CompositionMode_SourceIn);//叠加方式进入painter.drawPixmap(0, 0, src.scaled(maskSize,Qt::KeepAspectRatio, Qt::SmoothTransformation));//画painter.end();return QPixmap::fromImage(resultImage);
}
这段代码是一个函数`getRoundImage`,用于获取圆形图像。下面是对代码的解释:
首先,该函数接受三个参数:原始图像`src`、掩码图像`mask`和掩码尺寸`maskSize`。
如果`maskSize`为`(0, 0)`,则将使用`mask`的实际尺寸作为掩码尺寸。否则,将根据指定的`maskSize`对`mask`进行缩放操作,使用`Qt::KeepAspectRatio`和`Qt::SmoothTransformation`参数来保持图像的长宽比并平滑地进行转换。
之后,创建一个与掩码尺寸相同的`QImage`对象`resultImage`,像素格式设置为`QImage::Format_ARGB32_Premultiplied`,以实现更清晰的图像。
使用`QPainter`对象`painter`初始化`resultImage`。
接下来,设置绘图模式为`QPainter::CompositionMode_Source`,将原图像的像素输出到`resultImage`中,并用透明色填充整个矩形区域。
然后,设置绘图模式为`QPainter::CompositionMode_SourceOver`,使用`drawPixmap`方法在指定位置绘制`mask`。
再次设置绘图模式为`QPainter::CompositionMode_SourceIn`,使用`drawPixmap`方法在指定位置绘制经过缩放的原始图像`src`。
最后,结束绘画操作,将`resultImage`转换为`QPixmap`对象,并返回该对象。
总体而言,这段代码的作用是根据指定的原始图像和掩码图像,生成一个圆形图像。
更多推荐
根据指定的原始图像和掩码图像,生成一个圆形图像
发布评论