Qt可显示基本的图像类型,利用QImage、QPxmap类可以实现图像的显示,并且利用类中的方法可以实现图像的基本操作(缩放、旋转)。

1. Qt可显示的图像类型

参考Qt的帮助文档,可支持的类型,即可以直接读取并显示的格式有BMP、GIF、JPG、JPEG、PNG、TIFF、PBM、PGM、PPM、XBM、XPM。

2. Qt用如何显示图像

通常用QLabel显示图像,QLabel类有setPixmap()函数,可以用来显示图像。也可以直接用QPainter画出图像。

如果图像过大,直接用QLabel显示,将会出现有部分图像显示不出来,这时可以用Scroll Area部件。方法:将QLabel部件放到Scroll Area部件里面,将两个采用栅格布局,当图像超出了QLabel部件大小时,就会产生滑动杆,这样图像就可以都看到了。

3. 显示的方法

步骤:先打开一个图像;将图像文件加载进QImage对象中;再用QPixmap对象获得图像;最后用QLabel选择一个QPixmap图像对象显示。

代码如下:

    QString filename;
filename=QFileDialog::getOpenFileName(this,
tr("选择图像"),
"",
tr("Images (*.png *.bmp *.jpg *.tif *.GIF )"));
if(filename.isEmpty())
{
return;
}
else
{
QImage* img=new QImage; if(! ( img->load(filename) ) ) //加载图像
{
QMessageBox::information(this,
tr("打开图像失败"),
tr("打开图像失败!"));
delete img;
return;
}
ui->label->setPixmap(QPixmap::fromImage(*img));
}

注:也可以直接用QPixmap类的对象采用Load函数加载图像。这里说下QImage和QPixmap类的用处:QImage为图像的像素级访问做了优化,QPixmap使用底层平台的绘制系统进行绘制,无法提供像素级别的操作,而QImage则是使用独立于硬件的绘制系统。

4. 图像缩放

图像缩放采用scaled函数。函数原型

QImage QImage::scaled ( const QSize & size,Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationModetransformMode = Qt::FastTransformation ) const

使用方法如下,还是利用上面的img:

QImage* imgScaled = new QImage;
*imgScaled=img->scaled(width,
height,
Qt::KeepAspectRatio);
ui->label->setPixmap(QPixmap::fromImage(*imgScaled));

scaled函数中width和height表示缩放后图像的宽和高,即将原图像缩放到(width,height)大小。

5. 图像旋转

图像旋转可以利用QImage类的transformed函数,向transformed函数传入QMatrix对象,QMatrix对象指定了旋转的角度。

代码如下:

QImage* imgRatate = new QImage;
QMatrix matrix;
matrix.rotate(270);
*imgRotate = img->transformed(matrix);
ui->label->setPixmap(QPixmap::fromImage(*imgRotate));

注意:rotate函数中参数是旋转的角度,旋转是按顺时针方向旋转的,上面顺时针旋转270度,即逆时针旋转90度。

6. 图像连续缩放
有了图像缩放的基础,就可以实现图像的连续缩放,可以放置一个横向滑竿(中文解释不标准,就是Horizontal Slider部件 ),滑动滑轮的位置以实现图像连续缩放。

Horizontal Slider部件指向的值为整型value,即缩放后的图像为

img->scaled(orignalWidth*value/100,
                         orignalHeight*value/100,
                         Qt::KeepAspectRatio);

orignalWidth和orignalHeight为原始图像的宽和高。

注意:在对原始图像进行缩放多少倍数时,在相应的槽函数内只需要调用Horizontal Slider部件对象的setValue函数即可,因为Horizontal Slider部件滑竿指向的值一旦变化就会触发对应的槽函数来对图像进行缩放。

Qt中图像的显示与基本操作的更多相关文章

  1. 【转载】Qt中图像的显示与基本操作

    Qt可显示基本的图像类型,利用QImage.QPxmap类可以实现图像的显示,并且利用类中的方法可以实现图像的基本操作(缩放.旋转). 参考:Qt中图像的显示与基本操作 - ykm0722的专栏 - ...

  2. 【Qt开发】Qt中图像的显示与基本操作

    Qt可显示基本的图像类型,利用QImage.QPxmap类可以实现图像的显示,并且利用类中的方法可以实现图像的基本操作(缩放.旋转). 1. Qt可显示的图像类型 参考Qt的帮助文档,可支持的类型,即 ...

  3. Python-OpenCV中图像合并显示

    在图像处理中,我们通常需要将原图像与处理后的图像放在同一个窗口显示,这样便于比较. 首先,需要介绍Numpy中的两个函数:hstack().vstack(). 函数原型:hstack(tup) ,参数 ...

  4. 一、基于Qt的图像矩形区域改色

    Qt环境下图像的打开和涂色 一.设计目标 能够在 Qt QtCreator 环境下打开常用图像格式文件,诸如 bmp.jpg.png 图像等,然后将他们转化为 Qt 中的 QImage 类,并进行矩形 ...

  5. QT中关于窗口全屏显示与退出全屏的实现

    近期在学习QT时遇到了很多问题这也是其中一个,个人通过在各种书籍和网络上的查阅找到了一些关于这方面的答案,希望能给大家一些帮助. 首先,在QT中对于窗口显示常用的有这么几个方法可以调用: Qt全屏显示 ...

  6. qt中窗体全屏

    原文地址:https://www.cnblogs.com/wiessharling/p/3750461.html 近期在学习QT时遇到了很多问题这也是其中一个,个人通过在各种书籍和网络上的查阅找到了一 ...

  7. QT中循环显示图片和简单的显示图片

    请关注我的github https://github.com/linqiaozhou 以下实例代码不久后将会上传到我的github 这是我最近一个项目中的部分代码 //以下是简单的在QT中显示图片的代 ...

  8. QT中显示动画

    在QT中要显示GIF图片,不能通过单单的添加部件来完成.还需要手动的编写程序.工具:QT Creator新建一个工程,我们先在designer中,添加一个QLabel部件. 将QLabel拉成适当大小 ...

  9. MATLAB中图像的基本操作

    MATLAB中图像的基本操作 1.读取.显示图片 MATLAB中提供了immread()与imshow()函数读取和显示图片.其中读取函数imread()原型: imread: A = imread( ...

随机推荐

  1. sharepoint bcs (bussiness connectivity services)

    sharepoint bcs  在2010 版本中是提供2010 与外部数据连接的. BCS全名Business Connectivity Services,可以把它看成SharePoint 2007 ...

  2. Java for LeetCode 049 Anagrams

    Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be ...

  3. atom初体验

    今天捣鼓了一天的atom,也测试了那个传说中绚丽的敲代码方式,感觉就是装逼利器,这里总结一下今天捣鼓的过程吧 首页,下载atom,这个在地址是:搜索 之后是安装插件,在这之前如果下载的是.exe的,那 ...

  4. oracle 序列 详解

    序列: 是oacle提供的用于产生一系列唯一数字的数据库对象. l  自动提供唯一的数值 l  共享对象 l  主要用于提供主键值 l  将序列值装入内存可以提高访问效率 创建序列: 1.  要有创建 ...

  5. 谈谈Objective-C的警告 (转)

    原文地址:http://onevcat.com/2013/05/talk-about-warning/ 一个有节操的程序员会在乎自己的代码的警告,就像在乎饭碗边上有只死蟑螂那样. ——@onevcat ...

  6. js之事件冒泡和事件捕获介绍

    链接:http://www.jb51.net/article/42492.htm (1)冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发. (2)捕获型事件 ...

  7. Web Service 其他服务器检测不到查询测试按钮

    1.Web Service 其他服务器检测不到查询测试按钮,config需要修改地方: <system.web> <webServices> <protocols> ...

  8. C++的那些事:你真的了解引用吗

    一.引用的本质是什么 说到引用,一般C++的教材中都是这么定义的: 1,引用就是一个对象的别名. 2,引用不是值不占内存空间. 3,引用必须在定义时赋值,将变量与引用绑定. 那你有没有想过,上面的定义 ...

  9. Codeforces Round #313 (Div. 2) D. Equivalent Strings

    D. Equivalent Strings Time Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/559/ ...

  10. 【框架】RefreshListView下拉刷新

    布局: <com.example.administrator.d30_myrefreshlistview.RefreshListView android:id="@+id/refres ...