一般图像数据都是以RGBRGBRGB……字节流的方式(解码完成后的原始图像流),我说成字节流,那就表明R,G,B的值各占一个字节,在编程时表示的就是unsigned char * data。

我们先来看一下QT中的QImage对象。在加载data数据前,我们要确定QImage加载图像的空间分配足够大,先假设data是由640*480像素的压缩数据解码得来的,RGB(3字节)是一个像素,故data的应该是640*480*3个字节;比较一下下面两种方式:

       QImage img(640,480,QImage::Format_RGB888);//24位
        unsigned char * p_bits=img.bits();

24位(3字节)一个像素,那么p_bits所得到的空间应该是640*480*3个字节,所以刚刚好一个字节对一个字节。所以我们这样赋值即可:

        for(int i=0;i<640*480*3;i+=3)
    {
        puiBits[i]=data[i];
        puiBits[i+1]=data[i+1];
        puiBits[i+2]=data[i+2];
    }

    //接着就是将img转化成QPixmap填充到QWidget
    QPixmap pixmap=QPixmap::fromImage(img);
    pixmap=pixmap.scaled(widget->size());
    widget->setAutoFillBackground(true);
    QPalette palette;
    palette.setBrush(widget->backgroundRole(), QBrush(pixmap));
    widget->setPalette(palette);
    widget->repaint();

另一种方式:

       unsigned int * p_bits;

       QImage img(640,480,QImage::Format_RGB32);

       p_bits=(uint*)img.bits();

32位(4字节)一个像素,那么p_bits所得到的空间应该是640*480*4个字节,所以不能以上面的方式赋值。有没有注意到,这里用了unsigned int而不用unsigned char;unsigned int是4个字节的,unsigned char 是1个字节的,所以我们这里做的事情是将每一个RGB单元放到p_bits的每个unsigned int(4字节)中。因为p_bits是unsigned int指针,所以p_bits[i]就是4个字节。所以应该这样写:

        for(int i=0;i<640*480*3;i+=3)
    {
        p_bits[i/3]=qRgb(data[i],data[i+1],data[i+2]);
    }

    //接着就是将img转化成QPixmap填充到QWidget
    QPixmap pixmap=QPixmap::fromImage(img);
    pixmap=pixmap.scaled(widget->size());
    widget->setAutoFillBackground(true);
    QPalette palette;
    palette.setBrush(widget->backgroundRole(), QBrush(pixmap));
    widget->setPalette(palette);
    widget->repaint();

【Qt开发】QT中显示图像数据的更多相关文章

  1. C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二)

    本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (一) 上个帖子主要是讲了如何读取Excel,本帖主要是讲述读取的Excel数据是如何序列化成二进制的,考虑到现在在手游中 ...

  2. C# Unity游戏开发——Excel中的数据是如何到游戏中的 (三)

    本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二) 前几天有点事情所以没有继续更新,今天我们接着说.上个帖子中我们看到已经把Excel数据生成了.bin的文件,不过其 ...

  3. C# Unity游戏开发——Excel中的数据是如何到游戏中的 (四)2018.4.3更新

    本帖是延续的:C# Unity游戏开发--Excel中的数据是如何到游戏中的 (三) 最近项目不算太忙,终于有时间更新博客了.关于数据处理这个主题前面的(一)(二)(三)基本上算是一个完整的静态数据处 ...

  4. Qt开发环境中使用报表控件FastReport遇到的一些问题(一)

    FastReport是一款优秀的报表控件,由俄罗斯开发,国内有代理商.Qt环境下可实现报表功能的还有一款叫NCReport,也是收费控件,比较来比较去还是觉得前者功能强点.网上讲解此控件在Qt中使用的 ...

  5. Qt中将QTableView中的数据导出为Excel文件

    如果你在做一个报表类的程序,可能将内容导出为Excel文件是一项必须的功能.之前使用MFC的时候我就写过一个类,用于将grid中的数据导出为Excel文件.在使用了QtSql模块后,我很容易的将这个类 ...

  6. QT中显示图像数据

    博客转载自:https://blog.csdn.net/lg1259156776/article/details/52325091 一般图像数据都是以RGBRGBRGB……字节流的方式(解码完成后的原 ...

  7. Qt开发环境中使用报表控件FastReport遇到的一些问题(二)

    上一节中谈到的那个问题:传递的变量内容如果是纯英文,报表报错.经笔者反复测试,找到了解决办法:代码中第5行替换为以下 params<<"my_var"<<& ...

  8. C# Unity游戏开发——Excel中的数据是如何到游戏中的 (一)

    引言 现在做游戏开发的没有几个不用Excel的,用的最多的就是策划.尤其是数值策划,Excel为用户提供强大的工具,各种快捷键,各种插件,各种函数.但是作为程序来说其实关注的不是Excel而是它最终形 ...

  9. 看懂Qt源代码-Qt源码的对象数据存储

    第一次看Qt源代码的人都会被其代码所迷惑,经常会看到代码中的d_ptr成员.d_func(函数)和Q_DECLARE_PRIVATE等奇怪的宏,总是让人一头雾水,下面这篇文章转自http://www. ...

随机推荐

  1. http知识总结

    layout: '''http' title: 知识整理' date: 2019-06-09 17:07:20 tags: --- 简介 超文本传输​​协议(HTTP)是用于传输诸如HTML的超媒体文 ...

  2. k-means伪代码

    1.初始化k个簇中心. 2.更新所有样本点簇归属:样本点到哪个簇中心点最近就属于哪个簇. 3.重新计算每个簇的中心点(直到簇中心点不再变化或达到更新最大次数) #k-means伪代码 import n ...

  3. 【NOIP2016提高A组模拟8.19】(雅礼联考day2)公约数

    题目 给定一个正整数,在[1,n]的范围内,求出有多少个无序数对(a,b)满足gcd(a,b)=a xor b. 分析 显然a=b是一定不满足, 我们设\(a>b\), 易得gcd(a,b)&l ...

  4. JavaWeb面试篇(6)

    51.说一说Servlet的生命周期? Servlet有良好的生存期的定义,包括加载和实例化.初始化.处理请求以及服务结束.这个生存期由javax.servlet.Servlet接口的init(),s ...

  5. C# WPF开机自启动和只允许一个程序运行

    本文出自:https://www.cnblogs.com/2186009311CFF/p/10024949.html 在App.xaml.cs填充一下内容,即可实现只允许一个运行,且不解锁屏幕的情况下 ...

  6. python中的文件读取

    ---恢复内容开始--- r模式,只读模式,不可写入,文件不存在会报错 #r模式,能读不能写,文件不存在会报错 f = open('a1.txt')#不写'r',默认只读 result = f.rea ...

  7. 1.端口被占用问题:Embedded servlet container failed to start. Port 8097 was already in use.

    1.端口被占用问题:Embedded servlet container failed to start. Port 8097 was already in use.netstat -anonetst ...

  8. sh_08_打印小星星

    sh_08_打印小星星 # 在控制台连续输出五行 *,每一行星号的数量依次递增 # * # ** # *** # **** # ***** # 1. 定义一个计数器变量,从数字1开始,循环会比较方便 ...

  9. Java的格式化输出

    在java中除了有System.out.println();和System.out.print();之外还有一种格式化的输出,用来限制宽度,保留小数点后的位数,还有对齐方式. 代码: package ...

  10. 论文学习 :Learning a Deep Convolutional Network for Image Super-Resolution 2014

    (Learning a Deep Convolutional Network for Image Super-Resolution, ECCV2014) 摘要:我们提出了一种单图像超分辨率的深度学习方 ...