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



相关文章
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
这篇文章介绍了如何使用PyTorch框架,结合CIFAR-10数据集,通过定义神经网络、损失函数和优化器,进行模型的训练和测试。
86 2
目标检测实战(一):CIFAR10结合神经网络加载、训练、测试完整步骤
|
30天前
|
存储 测试技术 数据库
数据驱动测试和关键词驱动测试的区别
数据驱动测试 数据驱动测试或 DDT 也被称为参数化测试。
|
1月前
|
测试技术 Python
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
本文介绍了使用Python的unittest框架来加载测试用例的四种方法,包括通过测试用例类、模块、路径和逐条加载测试用例。
60 0
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
38 4
|
1月前
|
SQL 消息中间件 大数据
大数据-159 Apache Kylin 构建Cube 准备和测试数据(一)
大数据-159 Apache Kylin 构建Cube 准备和测试数据(一)
50 1
|
1月前
|
SQL 大数据 Apache
大数据-159 Apache Kylin 构建Cube 准备和测试数据(二)
大数据-159 Apache Kylin 构建Cube 准备和测试数据(二)
75 1
|
1月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
33 2
|
1月前
|
存储 监控 网络安全
内网渗透测试基础——敏感数据的防护
内网渗透测试基础——敏感数据的防护
|
1月前
|
SQL 关系型数据库 MySQL
SQL批量插入测试数据的几种方法?
SQL批量插入测试数据的几种方法?
89 1
|
2月前
|
存储 Java C++
QT源码拾贝0-5(qimage和qpainter)
这篇文章介绍了在Qt源码中qimage和qpainter的使用,包括线程池的使用、智能指针的存储、std::exchange函数的应用、获取类对象的方法以及QChar字节操作。
QT源码拾贝0-5(qimage和qpainter)