若该文为原创文章,未经允许不得转载
原博主博客地址: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