根据指定的原始图像和掩码图像,生成一个圆形图像

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`对象,并返回该对象。

总体而言,这段代码的作用是根据指定的原始图像和掩码图像,生成一个圆形图像。

你可能感兴趣的:(笔记,C++,Qt,c++,QT)