QImage 图像格式小结(1)

来源:互联网 发布:qq飞车淘宝包中真的吗 编辑:程序博客网 时间:2024/05/22 10:24

http://www.cnblogs.com/Romi/archive/2012/12/03/2800039.html

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

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

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

1.获得原图像数据

采用此方法即可,

unsignedchar *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));
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 资阳住房公积金查询 西安市住房公积金查询系统 郑州住房公积金查询 连云港市住房公积金查询系统 上海住房公积金查询个人账户 滁州住房公积金查询 住房公积金办理条件 住房公积金怎么交 住房公积金密码是什么 赣州住房公积金查询个人账户 南宁市住房公积金中心 昆山住房公积金查询 住房公积金办理 宜宾住房公积金查询 连云港住房公积金查询 柳州住房公积金管理中心 个人住房公积金查询 南宁市住房公积金 住房公积金异地买房 滁州市住房公积金管理中心 住房公积金查询个人账户查询 吉林市住房公积金 洛阳市住房公积金管理中心 河北省住房公积金查询 内蒙古住房公积金管理中心 常州住房公积金管理中心 住房公积金中心 无锡住房公积金管理中心 重庆住房公积金管理中心 吉林省住房公积金 黄石住房公积金查询个人账户 唐山住房公积金管理中心 唐山住房公积金 遵义市住房公积金查询 湖南省住房公积金查询 深圳市住房公积金 保定住房公积金管理中心 阜阳住房公积金查询 临沂住房公积金查询 呼和浩特住房公积金管理中心 住房公积金管理中心网