您的位置:首页 > 编程语言 > Qt开发

Qt完美实现切图

2016-07-29 20:23 645 查看
在有的时候我们必须使用程序来获得一个特定形状的图案,比如说我们要规定每一个用户的头像显示的是圆形的,这时候我们就需要进行切图。QPixmap自带一个setmask函数,但是这个函数的参数是一个bitmap,如果切一个矩形应该没问题,如果要切一个圆,那锯齿应该很多。所以要实现切图就是实现一个类似于setmask的函数。QPainter类给我们提供了一个混合模式的画图,基本上就是图像的 一些关系运算,覆盖啊,交啊,与啊,或啊 这样的运算。前提是图像必须是有透明通道的,不然运算有合意义?现在把代码贴出来:

void GetRundedRectImage(const QPixmap &src, QPixmap& dst, const QPixmap &mask)
{
QImage resultImage(mask.size(),QImage::Format_ARGB32_Premultiplied);
QPainter painter(&resultImage);
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(mask.size()));
painter.end();
dst = QPixmap::fromImage(resultImage);
}


这里使用的Mask是这样的一张图: 非透明部分是你要切的形状,透明部分是你不要的地方。实际效果如下:

原图:



切好的图:



效果还不错吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Qt 切图 抗锯齿