关于Qt旋转图片的一些说明
我们在QT中加载图片一般都是将图片加载在一个label中显示,当我们想让这个label旋转时,就会出现问题,因为控件在不重写的情况下,基本旋转不了,我们只能去旋转label中的图片,达到旋转控件的效果,在网上查了很多资料但是很少有人能把写完整的,所以在这里记录下自己遇到这些问题时的一些心得吧。
首先,我们了解一下QMatrix的知识。
QPainter预设的座标系统是绘图装置的座标系统,也就是左上角为原点,向右为正X,向下为正Y的座标系统,座标系统的转换常使用矩阵的方式来表现及进行运算, QMatrix的作用,正是让您可以利用其内建的矩阵,设定好相关的参数,然后让QPainter根据QMatrix的设定,来进行一些二维座标系统的转换动作。
QMatrix的内部使用一个3x3的矩阵:
m11 |
m12 |
0 |
m21 |
m22 |
0 |
dx |
dy |
1 |
dx与dy定义了水平与垂直移动,m11与m22定义了水平与垂直缩放(scaling),m12与m21定义了垂直与水平扭曲(shearing),想像您是坐在太空船中,在太空船从左上原点开到某个点之后,(x, y)是以您为中心所看到的座标,但实际上太空船相对于左上角为原点的座标为(x', y'),QMatrix的矩阵可以如以下的公式,将(x, y)转换为(x', y'):
x' = m11*x + m21*y + dx
y' = m22*y + m12*x + dy
当您使用QPainter要进行绘图时,可以您为中心所看到的座标系统(x, y),使用QPainter的相关API来进行相关图形的绘制,这就像您在太空船中画图一样的方便,若有设定QMatrix,则会自动转换为电脑绘图时所看到的座标系统(x', y'),如此就不用亲自进行一些复杂的转换动作,进行绘图时也较为直觉。
我的程序是利用QMatrix的函数做的旋转。具体调用如下:
void myRotate()
{
//要旋转的图片
QPixmap src_pix;
//旋转角度
int nDegree;
//中心点
int centre_x;
int centre_y;
QMatrix mat;
//设置旋转图片时的中心点
mat.translate(centre_x, centre_y);
//设置图片旋转角度
mat.rotate(nDegree);
//将图片旋转中心点放回图片的左上角
mat.translate(-centre_x, -centre_y);
//新建一张图片,并设置背景透明
QPixmap new_pix;
new_pix.fill(Qt::transparent); //设置透明
new_pix = src_pix.transformed(mat, Qt::SmoothTransformation);
//在图片画线
Qpainter paint(&new_pix);
//选择画笔
QPen pen(Qt::red, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
//起始点 和 终点
QPoint start_pt, end_pt;
paint.drawLine(start_pt, end_pt);
}
看到这里是不是觉得跟网上你查到的内容都是一样的,并没有不一样的地方,其实差别在我们设置的label属性上,如果我们设置label的scaledContents属性,图片会在label上做一些延伸,导致我们旋转图片时,图片会失帧变形,如果想保证图片不失帧不变形的旋转,我们就不要勾选scaledContens这个属性,将label和图片的宽高度一个属性设置为一样的值,旋转是以图片的中心点去旋转,这样就可以保证图片正常旋转。
后续会提供相应的例子供大家参考。
关于Qt旋转图片的一些说明相关推荐
- 全网最全!!Qt实现图片旋转及图片旋转动画的几种方式
实现图片旋转的两种方式 第一种方案 使用 QPixmap 的 transformed 函数来实现旋转,这个函数默认是以图片中心为旋转点,不能设置旋转的中心点,使用如下: QMatrix matrix; ...
- HTML5 3D旋转图片相册
H5旋转3D相册,鼠标放置暂停,图片灰度级为0,有放大效果. 该实例运用H5和CSS3动画效果,未用javascript.提高了本人对CSS3 新属性的了解及掌握. 完整代码如下: <!DOCT ...
- 小猿圈web前端之移动端Vue+Vant实现上传压缩旋转图片功能
小猿圈web前端讲师为了大家更好的学习前端知识决定每天分享一个web前端案例,希望对你与学习前端的你有所帮助,今天分享的是移动端Vue+Vant的Uploader实现上传.压缩.旋转图片等功能的详细介 ...
- css和js实现3d图片,JavaScript_纯JS实现旋转图片3D展示效果,CSS:style type=text/cssgt - phpStudy...
纯JS实现旋转图片3D展示效果 CSS: #show{position:relative;margin:20px auto;width:800px;} .item{position:absolute; ...
- QT旋转按钮控件的实现
目录 一.实现需求:鼠标hover时旋转 二.实现方式:计时器做动画 三.代码实现 QT旋转按钮控件的实现 一.实现需求:鼠标hover时旋转 需求是:实现类似于WINDOWS下,某些软件窗口关闭按钮 ...
- Qt Creator图片
Qt Creator图片 图片 图片大小 来源大小 图像对齐 表现 边框图片 动画图像 图片 图像类型用于以几种受支持的格式将图像添加到UI,包括位图格式(例如PNG和JPEG)和矢量图形格式(例如S ...
- 360度旋转图片小特效
现在,在这个网络发达的时代,一些电子商务公司,需要将自己线上的产品给买家或用户看,为了能让用户了解的更全面,那么把一个物件的产品要展示到方方面面,就要运用到360度旋转图片特效,因为上次有朋友叫我帮她 ...
- ios新手开发——toast提示和旋转图片加载框
不知不觉自学ios已经四个月了,从OC语法到app开发,过程虽然枯燥无味,但是结果还是挺有成就感的,在此分享我的ios开发之路中的小小心得~废话不多说,先上我们今天要实现的效果图: 有过一点做APP经 ...
- php 图片 3d旋转图片,html5实现图片的3D旋转效果
我们先来看一下实现效果: (学习视频分享:html视频教程) H5旋转3D相册,鼠标放置暂停,图片灰度级为0,有放大效果. 该实例运用H5和CSS3动画效果,未用javascript.提高了本人对CS ...
最新文章
- pg数据库与MySQL的count函数_postgresql数据库连接数和状态查询操作
- 成功解决You are using pip version 9.0.3, however version 10.0.1 is available. You should consider upgr
- 在windows下安装PyPdf2
- 从最基础的讲起如何做到均匀的生成随机数
- Istio 2020 年 Roadmap——一切为了商用
- 1107: 回文数猜想(函数专题)
- Razor视图引擎-基础语法
- python读取excel绘图y轴设置_python读取并定位excel数据坐标系详解
- bzoj 1709: [Usaco2007 Oct]Super Paintball超级弹珠
- wind7计算机控制面板在哪,联想win7系统控制面板在哪里打开
- 2020牛客多校九J-The Escape Plan of Groundhog
- 调试的时候没有在断点处停止的原因
- 互联网巨头常用词汇大全 每一个词都在改变世界
- DNSPod十问陈迪菲:从C到B,鹅厂设计师的中场战事
- oracle-1480,1400,1438错误一些解决方式
- 360兼容性问题:教资报名请使用搜狗浏览器(兼容模式)、360浏览器(兼容模式)、QQ浏览器(内核模式请选择:总是使用IE内核)、IE系列浏览器。
- 前端生成二维码及把页面转为图片保存到本地
- 笔记本玩梦幻西游开启时自动全屏,而且两边还有黑边!
- 有特别有创意的网站设计案例
- 软件定义的容错计算机体系,1.4 软件容错技术 - 计算机系统容错技术方法