Qt实用技巧:测试QImage加载解码、QImage使用原数据、QImage格式转换等等的时间消耗

简介: Qt实用技巧:测试QImage加载解码、QImage使用原数据、QImage格式转换等等的时间消耗

若该文为原创文章,未经允许不得转载

原博主博客地址:https://blog.csdn.net/qq21497936

原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062

本文章博客地址:https://blog.csdn.net/qq21497936/article/details/79562841

各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究

目录

需求

Demo

ReadMe

测试耗时项

加载图片的信息(可使用Demo替换自己的图片尝试即可)

演示图

核心代码


Qt开发专栏:实用技巧(点击传送门)

 

   Qt实用技巧:测试QImage加载解码、QImage使用原数据、QImage格式转换等等的时间消耗

 

需求

       测试Qt软解码时间,测试QImage数据类型转换的时间,确定项目方案。

 

Demo

       下载地址:https://download.csdn.net/download/qq21497936/10287385

     

ReadMe

 

测试耗时项

       1.从文件读取二进制转为image再到pixmap的时间

       2.image加载文件转换成pixmap的时间

       3.image加载文件只记录转换成pixmap的时间

       4.rgb数据赋值给image转换成pixmap的时间

       5.rgb数据赋值给image只记录转换成pixmap的时间

 

加载图片的信息(可使用Demo替换自己的图片尝试即可)

5*1920*1080p(较大)

 

演示图

 

核心代码

特别注意:用QFile读取文件耗时1ms不到,已测试过

1.从文件读取二进制转为image再到pixmap的时间

total = 0;
    for(int index = 0; index < _dirs; index++)
    {
        for(int index2 = 0; index2 < _count; index2++)
        {
            QElapsedTimer t;
            t.start();
            QString file = QString("./images/images%1/%2.jpg").arg(index+1).arg(index2+1);
            DEBUG(file);
            // 测试证明,读取文件根本花不了几个ms
            QFile f(file);
            f.open(QIODevice::ReadOnly);
            QByteArray data = f.readAll();
            // 使用QFile读取二进制,转换成image后再转换成pixmap
            QImage image;
            image.loadFromData(data);//转换成QImage
            QPixmap bmp;
            bmp = QPixmap::fromImage(image);//转换成QPixmap
            QString str = QString("file: %1 size:%2 time:%3").arg(file).arg(f.size()).arg(t.elapsed());
            total += t.elapsed();
            DEBUG(str);
            ui->textBrowser->append(str);
            f.close();
        }
    }
    ui->textBrowser->append(QString("total time : %1").arg(total));

2.image加载文件转换成pixmap的时间

total = 0;
    for(int index = 0; index < _dirs; index++)
    {
        for(int index2 = 0; index2 < _count; index2++)
        {
            QElapsedTimer t;
            QString file = QString("./images/images%1/%2.jpg").arg(index+1).arg(index2+1);
            t.start();
            // 使用QImage直接加载文件,再转换成pixmap
            DEBUG(file);
            QImage image;//转换成QImage
            image.load(file);
            QPixmap bmp;
            bmp = QPixmap::fromImage(image);//转换成QPixmap
            QString str = QString("file: %1 time:%2").arg(file).arg(t.elapsed());
            total += t.elapsed();
            DEBUG(str);
            ui->textBrowser_2->append(str);
        }
    }
    ui->textBrowser_2->append(QString("total time : %1").arg(total));

3.image加载文件只记录转换成pixmap的时间

total = 0;
    for(int index = 0; index < _dirs; index++)
    {
        for(int index2 = 0; index2 < _count; index2++)
        {
            QElapsedTimer t;
            QString file = QString("./images/images%1/%2.jpg").arg(index+1).arg(index2+1);
            // 使用QImage直接加载文件,再转换成pixmap
            DEBUG(file);
            QImage image;//转换成QImage
            image.load(file);
            t.start();
            QPixmap bmp;
            bmp = QPixmap::fromImage(image);//转换成QPixmap
            QString str = QString("file: %1 time:%2").arg(file).arg(t.elapsed());
            total += t.elapsed();
            DEBUG(str);
            ui->textBrowser_3->append(str);
        }
    }
    ui->textBrowser_3->append(QString("total time : %1").arg(total));

4.rgb数据赋值给image转换成pixmap的时间

total = 0;
    for(int index = 0; index < _dirs; index++)
    {
        for(int index2 = 0; index2 < _count; index2++)
        {
            QElapsedTimer t;
            QString file = QString("./images/images%1/%2.jpg").arg(index+1).arg(index2+1);
            QImage image;//转换成QImage
            image.load(file);
            QByteArray byteArray;
            for(int h = 0; h < image.height(); h++)
            {
                for(int w = 0; w < image.width(); w++)
                {
                    QColor color = image.pixelColor(w, h);
//                    qDebug() << __FILE__ << __LINE__ << color.alpha() << (char)color.red() << (char)color.green() << (char)color.blue();
//                    byteArray.append((uchar)color.alpha());
                    // uchar 输入 gba 给 image当uchar *
//                    、QImage::Format_RGB32,存入格式为B,G,R,A 对应 0,1,2,3
//                        QImage::Format_RGB888,存入格式为R, G, B 对应 0,1,2
//                        QImage::Format_Indexed8,需要设定颜色表,QVector<QRgb>
                    byteArray.append((uchar)color.blue());
                    byteArray.append((uchar)color.green());
                    byteArray.append((uchar)color.red());
                    byteArray.append((uchar)color.alpha());
//                    if(w == 0 && h == 0)
//                        qDebug() << __FILE__ << __LINE__ << byteArray.toHex();
                }
            }
            t.start();
            QImage image2((uchar *)byteArray.data(), image.width(), image.height(), QImage::Format_RGB32);
//            QImage image2((uchar *)byteArray.data(), 1, 1, QImage::Format_RGB32);
            QPixmap bmp;
            bmp = QPixmap::fromImage(image2);//转换成QPixmap
            QString str = QString("file: %1 time:%2 width:%3 height:%4").arg(file).arg(t.elapsed()).arg(image2.width()).arg(image2.height());
            total += t.elapsed();
//            qDebug() << __FILE__ << __LINE__ << image.width() << image.height() << image2.width() << image2.height();
//            image2.pixel(0, 0);
            if(image.pixel(1000, 1000) == image2.pixel(1000,1000))
                ui->textBrowser_4->append(str);
//            for(int h = 0; h < image2.height(); h++)
//            {
//                for(int w = 0; w < image2.width(); w++)
//                    ;
//                int w = 1000;
//                qDebug() << __FILE__ << __LINE__ << w << h << image.pixel(w, h) << image2.pixel(w, h) << byteArray.size();
//            }
                DEBUG(str);
        }
    }
    ui->textBrowser_4->append(QString("total time : %1").arg(total));

5.rgb数据赋值给image只记录转换成pixmap的时间

    total = 0;
    for(int index = 0; index < _dirs; index++)
    {
        for(int index2 = 0; index2 < _count; index2++)
        {
            QElapsedTimer t;
            QString file = QString("./images/images%1/%2.jpg").arg(index+1).arg(index2+1);
            QImage image;//转换成QImage
            image.load(file);
            QByteArray byteArray;
            for(int h = 0; h < image.height(); h++)
            {
                for(int w = 0; w < image.width(); w++)
                {
                    QColor color = image.pixelColor(w, h);
//                    qDebug() << __FILE__ << __LINE__ << color.alpha() << (char)color.red() << (char)color.green() << (char)color.blue();
//                    byteArray.append((uchar)color.alpha());
                    // uchar 输入 gba 给 image当uchar *
                    byteArray.append((uchar)color.blue());
                    byteArray.append((uchar)color.green());
                    byteArray.append((uchar)color.red());
                    byteArray.append((uchar)color.alpha());
                }
            }
            QImage image2((uchar *)byteArray.data(), image.width(), image.height(), QImage::Format_RGB32);
            t.start();
            QPixmap bmp;
            bmp = QPixmap::fromImage(image2);//转换成QPixmap
            QString str = QString("file: %1 time:%2 width:%3 height:%4").arg(file).arg(t.elapsed()).arg(image2.width()).arg(image2.height());
            total += t.elapsed();
//            qDebug() << __FILE__ << __LINE__ << image.width() << image.height() << image2.width() << image2.height();
//            image2.pixel(0, 0);
            if(image.pixel(1000, 1000) == image2.pixel(1000,1000))
                ui->textBrowser_5->append(str);
            DEBUG(str);
        }
    }
    ui->textBrowser_5->append(QString("total time : %1").arg(total));

 

原博主博客地址:https://blog.csdn.net/qq21497936

原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062

本文章博客地址:https://blog.csdn.net/qq21497936/article/details/79562841



相关文章
|
2月前
|
测试技术 API C#
C#使用Bogus生成测试数据
C#使用Bogus生成测试数据
39 1
|
4天前
|
存储 Java C++
QT源码拾贝0-5(qimage和qpainter)
这篇文章介绍了在Qt源码中qimage和qpainter的使用,包括线程池的使用、智能指针的存储、std::exchange函数的应用、获取类对象的方法以及QChar字节操作。
QT源码拾贝0-5(qimage和qpainter)
|
2月前
|
存储 C++
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
|
2月前
|
存储 人工智能 自然语言处理
知识库优化增强,支持多种数据类型、多种检索策略、召回测试 | Botnow上新
Botnow近期对其知识库功能进行了全面升级,显著提升了数据处理能力、检索效率及准确性。新版本支持多样化的数据格式,包括PDF、Word、TXT、Excel和CSV等文件,无需额外转换即可直接导入,极大地丰富了知识来源。此外,还新增了细致的文本分片管理和编辑功能,以及表格数据的结构化处理,使知识管理更为精细化。 同时,平台提供了多种检索策略,包括混合检索、语义检索和全文检索等,可根据具体需求灵活选择,有效解决了大模型幻觉问题,增强了专业领域的知识覆盖,从而显著提高了回复的准确性。这些改进广泛适用于客服咨询、知识问答等多种应用场景,极大提升了用户体验和交互质量。
58 4
|
2月前
|
NoSQL Linux Android开发
内核实验(三):编写简单Linux内核模块,使用Qemu加载ko做测试
本文介绍了如何在QEMU中挂载虚拟分区、创建和编译简单的Linux内核模块,并在QEMU虚拟机中加载和测试这些内核模块,包括创建虚拟分区、编写内核模块代码、编译、部署以及在QEMU中的加载和测试过程。
105 0
内核实验(三):编写简单Linux内核模块,使用Qemu加载ko做测试
|
15天前
|
存储 监控 安全
在自动化测试环境中,如何确保测试数据的安全性和隐私性
在自动化测试环境中,如何确保测试数据的安全性和隐私性
|
2月前
【Application Insights】使用Powershell命令向Application Insgihts发送测试数据
【Application Insights】使用Powershell命令向Application Insgihts发送测试数据
|
2月前
|
JSON Kubernetes Linux
【Application Insights】使用CURL命令向Application Insgihts发送测试数据
【Application Insights】使用CURL命令向Application Insgihts发送测试数据
|
2月前
|
存储 算法 C++
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
|
2月前
|
关系型数据库 MySQL Python
[python]使用faker库生成测试数据
[python]使用faker库生成测试数据
下一篇
无影云桌面