若该文为原创文章,未经允许不得转载
原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/79562841
各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究
目录
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