zoukankan      html  css  js  c++  java
  • 【Qt开发】QT中显示图像数据

    一般图像数据都是以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();
  • 相关阅读:
    APICloud联合腾讯云推出“云主机解决方案“,各种福利等你拿
    WiFi模块Demo(新手教程)图文详解模块使用教程
    移动APP 微信支付完整过程(wxPay 方案一)
    APICloud开发者进阶之路 | txLive模块(直播类)试用分享
    解决R语言临时文件目录的问题(tempdir、tempfile)
    CentOS下SparkR安装部署:hadoop2.7.3+spark2.0.0+scale2.11.8+hive2.1.0
    Extending sparklyr to Compute Cost for K-means on YARN Cluster with Spark ML Library
    Running R jobs quickly on many machines(转)
    R语言快速深度学习进行回归预测(转)
    sparklyr包:实现Spark与R的接口
  • 原文地址:https://www.cnblogs.com/huty/p/8518257.html
Copyright © 2011-2022 走看看