Qt加载RGB内存数据,并显示彩色图

本文分享了在Qt中处理和显示RGB图像的方法,包括如何将RGB数据转化为BMP位图,RGB与YUV格式转换公式,以及在内存中压缩RGB数组成JPEG文件的技巧。特别强调了正确设置QImage参数避免图像显示扭曲的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做图像处理,需要将试验得到的数据转化成RGB,再显示到界面

顺便学习了如下三个知识点:

  1. RGB数据生成BMP位图
  2. YUV 格式与 RGB 格式的相互转换公式总结(C++版)
  3. 将RGB数组在内存中压缩成JPEG文件

直接上Qt加载RGB图片数据代码:

 for(int i = 0;i<height;i++)
        {
            for(int j = 0;j<width;j++)
            {
                ImageRGB_m[i*3*width+3*j]  =ImageR_m[i*width+j];
                ImageRGB_m[i*3*width+3*j+1]=ImageG_m[i*width+j];
                ImageRGB_m[i*3*width+3*j+2]=ImageB_m[i*width+j];
            }
        }
        QImage *tempImage=new QImage(ImageRGB_m,width,height,QImage::Format_RGB888);
        ImageLable_m->setImagePix(tempImage);
        ImageLable_m->show();

        ui->image_LB_show->setPixmap(QPixmap::fromImage(*image));

 中间的ImageLable_m是我自己写的一个专门用于显示图片包含QLabel的一个类.这个是在5.5.1版本中可以先试采土代码。

网上发现很多人说RGB的彩图显示不了,最开始我的也是现实不了,后来发现是
 

QImage(ImageRGB_m,width,height,QImage::Format_RGB888);

这个是个重载函数,如果要限定每一行的数据大小,切记不要限定为width,这样也是导致显示不了的主要原因,这时候看tempImage的调试信息显示位invalid,将限定数据大小的去掉就可以正常显示彩图了。也就是不要写成QImage(ImageRGB_m,width,height,width ,QImage::Format_RGB888);,如果要防止图片扭曲可以写成下面这样就可以了
QImage *tempImage=new QImage(ImageRGB_m,width,height,3*width,QImage::Format_RGB888);


防扭曲操作:

同时限定每一行的数据大小可以保证图片显示不扭曲,这里之前每次生成的图片都是扭曲的,没行像素点都对不上,其实就是没有限定每一行数据的大小,当不限定每一行数据的大小的时候磨人的貌似是8的倍数的就刚好可以显示,否则就会发生错行,也就是扭曲的了。Qt里面有很多需要注意的细节的了,希望对遇到同样问题的人有帮助。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值