一般图像数据都是以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