qt 5 对图片解析

Qt中QImage类封装了对于一般图像像素级的操作,图像显示则使用QPixmap。

本文说说对一般图像(常见格式,图像不大)的处理,比如将彩色图像处理为灰度图像。首先要获得源图像数据,对源图像数据进行处理,将结果保存并显示。

QImage *img;//原图像QImage *grayImg;//处理后灰度图像

1.获得原图像数据

采用此方法即可,


unsigned char *data=img->bits();//获取图像像素字节数据的首地址

这里要注意,采用bits()方法的到的数据data中像素的组织形式应为ARGB,但实际调试中发现,每个像素中从字节从低到高依次是BGRA,方向刚好反过来。在处理彩色图像时尤其注意。下面会解释这样排列顺序的原因。

2.灰度处理

 1 int width=img->width();//图像宽 2 int height=img->height();//图像高 3  4 int bytePerLine=(width*24+31)/8;//图像每行字节对齐 5  6 graydata=new unsigned char[bytePerLine*height];//存储处理后的数据 7  8 unsigned char r,g,b; 9 for (int i=0;i<height;i++)10 {11     for (int j=0;j<width;j++)12     {13         r = *(data+2);14         g = *(data+1);15         b = *data;16 17         graydata[i*bytePerLine+j*3]  =(r*30+g*59+b*11)/100;18         graydata[i*bytePerLine+j*3+1]=(r*30+g*59+b*11)/100;19         graydata[i*bytePerLine+j*3+2]=(r*30+g*59+b*11)/100;20 21         data+=4;22     }23 }

上述代码中要注意字节对齐,否则可能处理完后的图像会变形扭曲。此外要注意r/g/b三值的获得,下面解释其具体原因。

首先,data指针是存放在栈中的,在windows中栈是向低地址扩展的数据结构(与此对应,堆是向高地址扩展的数据结构)。在小端存储模式下,低地址存放低有效字节,栈中数据的结构如下图所示:

3.显示图像

1 grayImg=new QImage(graydata,width,height,bytePerLine,QImage::Format_RGB888);2 ui.label->setPixmap(QPixmap::fromImage(*grayImg));
时间: 2024-10-05 05:05:49

qt 5 对图片解析的相关文章

Qt Socket 收发图片——图像拆包、组包、粘包处理

之前给大家分享了一个使用python发图片数据.Qt server接收图片的Demo.之前的Demo用于传输小字节的图片是可以的,但如果是传输大的图片,使用socket无法一次完成发送该怎么办呢?本次和大家分享一个对大的图片拆包.组包.处理粘包的例子. 程序平台:ubuntu . Qt 5.5.1 为了对接收到的图像字节进行组包,我们需要对每包数据规定协议,协议如下图: 每包数据前10个字节对应含义如下:前两个字节对应数据包类型,中间四字节预留,最后四字节是包内数据实际长度.对应协议图片更方便刚

Zxing图片识别 从相册选二维码图片解析总结

Zxing图片识别 从相册选取二维码图片进行解析总结 在Zxing扫描识别和图片识别的解析对象是相同的 本文分三个步骤: 1 获取相册的照片 2 解析二维码图片 3 返回结果 1) 获取相册照片 google对4.4的uri做了点改动  为了适配多种手机 需要做一个判断版本 在Activity中开启相册: Intent innerIntent = new Intent(); // "android.intent.action.GET_CONTENT" if (Build.VERSION

QT实现头像图片剪切框

近期在做一个qt项目,在用户选择头像图片后,需要将图片载入,并对其进行用户自定义裁剪.通过研究参照各流行软件的裁剪方式后,发现qq实现的裁剪比较好看,于是,我想那就做一个和qq相似的吧.先放一张qq实现的效果,然后最后再放我实现的效果. 1. 怎样去实现裁剪 对 于一张载入的图片,要实现用户自定义裁剪,那么首先我需要有一个能够响应用户自由缩放的边框,当用户缩放到心仪大小,再摆到适当位置,我能知道框的位置及 长宽,那么获取框里面的图片就很简单了.另外,我需要阴影,只有在框里面的图像部分是正常的,其

QT error LNK2019: 无法解析的外部符号

一个见到那的错误,困扰了好几天了,今天才解决,记录下. 使用QT Creator建立项目,添加一个QT设计界面widget,命名为TestWidget.有ui,头文件(.h),源码文件(.cpp).在使用TestWidget编译时,被编译器标为“无法解析的外部符号”. error LNK2019 无法解析的外部符号 解决方法:将当前qt工程所在的父目录下的 build-(工程名)-XXXXXX-Debug 文件夹删除,再构建项目即可运行..

将gif图片解析为cocos2d-x帧动画

因为游戏项目需要能够直接播放gif格式的图片,但是cocos2d-x本身并没有提供这方面的功能.在网上查阅发现已经有人给出了一种实现,但是并不能够完全满足我的需求.而且存在一些问题,如不能跨平台,频繁加载时导致内存用尽.后来参考其源码作出了一些修改,使gif图片转换为帧动画方便我使用. 现在已经优化了内存分配问题并且支持跨平台了,支持cocos2d-x3.0以上版本. 下面是使用例子: // 动画定义 GifAnimationDef def; def.loops = -1; // 循环次数 de

QT制作一个图片播放器

前言:使用qt制作了一个简单的图片播放器,可以播放gif.png等格式图片 先来看看播放器的功能(当然是很简陋的,没有很深入的设计): 1.点击图片列表中图片进行播放. 2.自动播放,播放的图片的间隔时间可以自己设定,时间的单位是秒. 3.自动播放的时候再点击图片列表会停止自动播放,保存当前播放的图片的顺序,再次点击自动播放的时候将从当前开始. 4.自动播放到最后一张图片的时候将会停止自动播放,再次点击自动播放的时候将会从第一张图片开始. 先上图看看具体功能: 说完功能我们聊聊制作思路和使用到的

Ubuntu上Qt之简单图片浏览器

>>功能: (1)图片切换浏览,上一张/下一张. (2)图片放大.缩小.包括两种机制:鼠标滚轮和按钮放大/缩小. (3)图片自动循环播放.点击播放后,其他操作均无效,直至点击暂停. (4)在图片被放大/缩小后,点击还原或者切换图片时,自动恢复为默认大小. >>最终效果: (1)点击播放按钮: (2)暂停后,点击下一张: (3)点击放大(或鼠标滚轮往前滚动): (4)点击还原: (5)点击缩小(或鼠标滚轮往后滑动): (6)点击上一张: (7)点击旋转: (8)点击缩小(或鼠标滚轮往

Qt中三种解析xml的方式

在下面的随笔中,我会根据xml的结构,给出Qt中解析这个xml的三种方式的代码.虽然,这个代码时通过调用Qt的函数实现的,但是,很多开源的C++解析xml的库,甚至很多其他语言解析xml的库,都和下面三种解析xml采用相同的原理,所以就算你不是学习qt,也可以大致参看一下代码,对三种解析方式有一种大致的感觉. 先给出xml如下: <?xml version="1.0" encoding="utf-8"?> <school> <teach

QT使用QJson生成解析Json数据的方法

QT中使用json还是比较方便的,下面用例子直接说明 举例子之前首先推荐一个在线解析json格式的网站,具体格式用法如下图所示: 之后根据这个格式进行json数据解析. QT使用json需要包含的头文件 #include<qjsondocument.h> #include<qjsonarray.h> #include<qjsonobject.h> #include<qjsonvalue.h> 先看一段简单的生成QJSON数据的方法吧: //简单的QTJson