QT5开发及实例学习之十二Qt5图像坐标变换


前言

  QMatrix 类提供了世界坐标系统的二维转换功能,可以使窗体转换变形,经常在绘图程序中使用,还可以实现坐标系统的移动、缩放、变形及旋转功能。
  setScaledContents 用来设置该控件的 scaledContents 属性,确定是否根据其大小自动调节内容大小,以使内容充满整个有效区域。若设置值为 true ,则当显示图片时,控件会根据其大小对图片进行调节。该属性默认值为 false。另外,可以通过 hasScaledContents() 来获取该属性的值。


一、缩放功能

  实现图形放大功能的函数如下:

	void ImgProcessor::showZoomIn()
	{
	    if(img.isNull())        //有效性判断
	        return;
	    QMatrix matrix;         //声明一个 QMatrix 类的实例
	    matrix.scale(2, 2);     //按2倍比例对水平和垂直方向进行放大,并将当前显示的图形按照该坐标矩阵进行转换
	    img = img.transformed(matrix);
	
	    showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));
	}

  QMatrix & QMatrix::scale(qreal sx, qreal sy) 函数返回缩放后的 matix 对象引用,若要实现 2 倍比例缩小,则将参数 sx 和 sy 改为 0.5 即可。
  scale(qreal sx, qreal sy):此函数的参数是 qreal 类型值。qreal 定义了一种 double 数据类型,该数据类型适用于所有的平台。需要注意的是,对于 ARM 体系结构的平台,qreal 是一种 float 类型。

二、旋转功能

  旋转90°函数具体实现如下:

	void ImgProcessor::showRotate90()
	{
	    if(img.isNull())
	        return;
	    QMatrix matrix;
	    matrix.rotate(90);
	    img = img.transformed(matrix);
	    showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));
	}

  需要注意的是,在窗口设计中,由于坐标系的 Y 轴是向下的,所以用户看到的图形是顺时针旋转 90°,而实际上是逆时针旋转 90°。

三、镜像功能

  通过 QImage::mirrored(bool horizontal, bool vertical) 实现图形的镜像功能,参数 horizontal 和 vertical 分别指定了镜像的方向。
  镜像函数具体实现如下:

	void ImgProcessor::showMirrorVertical()
	{
	    if(img.isNull())
	        return;
	    img = img.mirrored(false, true);
	    showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));
	}
	
	void ImgProcessor::showMirrorHorizontal()
	{
	    if(img.isNull())
	        return;
	    img = img.mirrored(true, false);
	    showWidget->imageLabel->setPixmap(QPixmap::fromImage(img));
	}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值