一般图像数据都是以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. mysql忘记密码如何重置密码,以及修改root密码的三种方法

    1.先将MySQL停止. 命令:systemctl  stop mysqld       #停掉MySQL 命令:systemctl status mysqld         #查看状态 2.然后跳 ...

  2. u-boot v2018.01 启动流程分析

    https://blog.csdn.net/weixin_39655765/article/details/80058644#jump1 make smdkc100_defconfig     以被默 ...

  3. ztree多种数据包装以及相关设置

    首先来一个完整的ztree代码 html代码 <form id="addTreeDataFrm" method="post" class="fo ...

  4. DevExpress v19.1新版亮点——WinForms篇(五)

    行业领先的.NET界面控件DevExpress v19.1终于正式发布,本站将以连载的形式介绍各版本新增内容.在本系列文章中将为大家介绍DevExpress WinForms v19.1中新增的一些控 ...

  5. springMVC项目访问URL链接时遇到某一段然后忽略后面的部分

    背景:一个链接URL:http:localhost/tq/asf/218732,配置URL使遇到/asf后直接跳转不识别/asf后面的218732 因为是在ssm框架下做的项目,所以用spring的注 ...

  6. java初学者的Springmvc04笔记

    Springmvc04 Springmvc的全局异常处理 springmvc与spring的整合 myBatis 1.Springmvc的全局异常处理 作用:一次配置,对于controller层的所有 ...

  7. Arduino连接MPU6050陀螺仪

    一.线路连接 Arduino MPU6050 VCC 3.3V/5V GND GND SCL A5 SDA A4 INT D2 二.库下载 https://pan.baidu.com/s/1nvt75 ...

  8. 【leetcode】Reorganize String

    题目如下: Given a string S, check if the letters can be rearranged so that two characters that are adjac ...

  9. C#调用Python(二)

    python文件中有引入其他包.模块 一.源码 1.1  python源码,源码.python 打包方法,以及打包后的程序文件.请移步https://www.cnblogs.com/zhuanjiao ...

  10. Python3 操作mysql数据库

    python关于mysql的API--pymysql模块 pymsql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同. 模块安装 pip install pymysq ...