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();
  • 相关阅读:
    三次请求(读-改-读)引出nibernate 一级缓存
    算法竞赛入门经典第一、二章摘记
    uva 10905 Children's Game
    uva 11205 The broken pedometer
    uva 10160 Servicing stations
    uva 208 Firetruck
    uva 167 The Sultan's Successors
    zoj 1016 Parencodings
    uva 307 Sticks
    uva 216 Getting in Line
  • 原文地址:https://www.cnblogs.com/huty/p/8518258.html
Copyright © 2011-2022 走看看