Qt完美实现切图
2016-07-29 20:23
645 查看
在有的时候我们必须使用程序来获得一个特定形状的图案,比如说我们要规定每一个用户的头像显示的是圆形的,这时候我们就需要进行切图。QPixmap自带一个setmask函数,但是这个函数的参数是一个bitmap,如果切一个矩形应该没问题,如果要切一个圆,那锯齿应该很多。所以要实现切图就是实现一个类似于setmask的函数。QPainter类给我们提供了一个混合模式的画图,基本上就是图像的 一些关系运算,覆盖啊,交啊,与啊,或啊 这样的运算。前提是图像必须是有透明通道的,不然运算有合意义?现在把代码贴出来:
这里使用的Mask是这样的一张图: 非透明部分是你要切的形状,透明部分是你不要的地方。实际效果如下:
原图:
切好的图:
效果还不错吧!
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学习 第一章:基本对话框
- 使用Shiboken为C++和Qt库创建Python绑定
- Qt 5.6更新至RC版,最终版本近在咫尺
- Qt定时器和随机数详解
- Qt实现图片移动实例(图文教程)
- Qt for Android开发实例教程
- QModelIndex/Role/Model介紹<二>
- Qt Model/View/Delegate浅谈 - QAbstractListModel
- Qt Model/View/Delegate浅谈 - roleNames()
- QT历程(一):与CryptoJs对应的AES加密
- 基于PyQt5的快速开发框架QFramer
- OSX下安装PyQt
- ok6410开发板移植DirectFB手记
- 【笔记】给Qt内嵌一个Chrome吧
- 【算法】最短路径之A*搜索
- qt入门必备
- 在 Qt4 中使用 C++11
- Hello Word ~ v0.2.2 背单词软件发布 -- By WHYPRO
- ubuntu下opencv和qt的安装配置
- linux下opengl的安装(with qt)