qt 提高图片加载速度
一,将图片在pc上解析,然后将解析文件放到qrc文件中,读取qrc文件。
1,将图片解析后的二进制文件保存,源码如下,
下载地址:https://files.cnblogs.com/files/senior-engineer/imageTest.rar
main.cpp
#include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }
widget.h
#ifndef WIDGET_H #define WIDGET_H#include <QWidget>namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private slots:void saveImageToFile();void refreshImage();private:Ui::Widget *ui;private:QString m_fileName;int m_imgWidth;int m_imgHeight; };#endif // WIDGET_H
widget.cpp
#include "widget.h" #include "ui_widget.h" #include <QImage> #include <QFile> #include <QDebug> #include <QResource>#define IMAG_BIT 3Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);//m_fileName = "radio_but_eq_p.png";m_fileName = "bg.png";ui->imageName->setText(m_fileName);// QResource resource; // resource.setFileName(":/main_bg.png"); // const uchar* imageData = resource.data(); // QImage desImage = QImage(imageData, 800,480,QImage::Format_RGB32); //RGB32 // QPixmap pixmag; // pixmag = QPixmap::fromImage(desImage); // ui->oldImage->setPixmap(pixmag); QPixmap pixmap(":/main_bg.png");ui->oldImage->setPixmap(pixmap);// QPixmap pixmag; // pixmag.load(m_fileName); // ui->oldImage->setPixmap(pixmag); connect(ui->start, SIGNAL(clicked(bool)), this, SLOT(saveImageToFile()));connect(ui->refresh, SIGNAL(clicked(bool)), this, SLOT(refreshImage())); }Widget::~Widget() {delete ui; }void Widget::saveImageToFile() {QImage image(m_fileName);// QImage image = QImage(800,480,QImage::Format_RGB888); //RGB32// image.load(m_fileName);int size = image.byteCount();int sizePerLine = image.bytesPerLine();int line = size / sizePerLine;m_imgWidth = image.width();m_imgHeight = image.height();qDebug() << "size:" <<size;qDebug() << "sizePerLine:" << sizePerLine;qDebug() << "line:" << line;qDebug() << "width:" << m_imgWidth;uchar* imgDataNew = image.bits();FILE *pf = fopen("newfile.png", "wb");if(pf == NULL)return;QFile file;file.open(pf, QIODevice::WriteOnly); //1for(int i = 0; i < line; i++){uchar* lineData = image.scanLine(i);for(int j = 0; j < sizePerLine; j++){file.write((char*)(lineData + j),1);}}file.close();// QImage desImage = QImage(m_imgWidth,m_imgHeight,QImage::Format_RGB32); //RGB32// //RGB分量值 // int b = 0; // int g = 0; // int r = 0; // int a = 0;// //设置像素 // for (int i=0;i < m_imgHeight;i++) // { // for (int j=0; j < m_imgWidth * 4;) // { // b = (int)*(imgDataNew + i * m_imgWidth * 4 + j); // g = (int)*(imgDataNew + i * m_imgWidth * 4 + j + 1); // r = (int)*(imgDataNew + i * m_imgWidth * 4 + j + 2); // a = (int)*(imgDataNew + i * m_imgWidth * 4 + j + 3); // desImage.setPixel(j / 4,i,qRgba(r,g,b,a)); // j = j + 4; // //desImage.setPixel(j,i,qRgb(r,g,b)); // } // }// QPixmap pixmag; // pixmag = QPixmap::fromImage(desImage); // ui->newImage->setPixmap(pixmag); }void Widget::refreshImage() {QFile file(":/newfile.png");//if (!file.open(QIODevice::ReadOnly | QIODevice::Text))if (!file.open(QIODevice::ReadOnly))return;QByteArray array = file.readAll();//file.close();char* imgDataNew = array.data();QImage desImage = QImage(m_imgWidth,m_imgHeight,QImage::Format_RGB32); //RGB32//RGB分量值int b = 0;int g = 0;int r = 0;int a = 0;//设置像素for (int i=0;i < m_imgHeight;i++){for (int j=0; j < m_imgWidth * 4;){b = (int)*(imgDataNew + i * m_imgWidth * 4 + j);g = (int)*(imgDataNew + i * m_imgWidth * 4 + j + 1);r = (int)*(imgDataNew + i * m_imgWidth * 4 + j + 2);a = (int)*(imgDataNew + i * m_imgWidth * 4 + j + 3);desImage.setPixel(j / 4,i,qRgba(r,g,b,a));j = j + 4;//desImage.setPixel(j,i,qRgb(r,g,b)); }}QPixmap pixmag;pixmag = QPixmap::fromImage(desImage);ui->newImage->setPixmap(pixmag);// QImage desImage ; // if(IMAG_BIT == 3) // desImage = QImage(m_imgWidth,m_imgHeight,QImage::Format_RGB888); //RGB24 // else if(IMAG_BIT == 4) // desImage = QImage(m_imgWidth,m_imgHeight,QImage::Format_RGB32); //RGB32// //RGB分量值 // char b = 0; // char g = 0; // char r = 0; // char a = 0;// //设置像素 // for (int i=0;i < m_imgHeight;i++) // { // for (int j=0; j < m_imgWidth * IMAG_BIT;) // { // b = (int)*(imgDataNew + i * m_imgWidth * IMAG_BIT + j); // g = (int)*(imgDataNew + i * m_imgWidth * IMAG_BIT + j + 1); // r = (int)*(imgDataNew + i * m_imgWidth * IMAG_BIT + j + 2); // if(IMAG_BIT == 4) // { // a = (int)*(imgDataNew + i * m_imgWidth * IMAG_BIT + j + 3); // desImage.setPixel(j / IMAG_BIT,i,qRgba(r,g,b,a)); // } // else if(IMAG_BIT == 3) // { // desImage.setPixel(j / IMAG_BIT, i, qRgb(r,g,b)); // } // j = j + IMAG_BIT; // } // }// QPixmap pixmag; // pixmag = QPixmap::fromImage(desImage); // ui->newImage->setPixmap(pixmag); }
二,此方法已经试过了,但是open文件时候很耗时,大概200~300ms
(!file.open(QIODevice::ReadOnly))
二,直接加图片放到qrc文件中,读取qrc文件
一,qrc文件中添加图片资源
二,再.pro文件中添加qrc文件
例如: RESOURCES = res.qrc
三,在程序中使用图片文件时候,通过“:文件名”
例如:image=new QImage(":1.png");
四,此方法原理对应qt官方文档地址:http://doc.qt.io/qt-5/resources.html
三,将图片转换为数组,然后将图片画到界面上(适用绘制字体)
一,用下面工具将图片转换为数组
https://files.cnblogs.com/files/senior-engineer/fileToC.rar
二,更具对应数每个bit对应的是1或者是0绘制黑白
转载于:https://www.cnblogs.com/senior-engineer/p/9548271.html
qt 提高图片加载速度相关推荐
- 图片较多时要提高网页加载速度
1.图片懒加载 将图片src先赋值为一张默认图片,当用户滚动滚动条到可视区域图片的时候,再去加载后续真正的图片 如果用户只对第一张图片感兴趣,那剩余的图片请求就可以节省了. 懒加载(LazyLoad) ...
- C# MVC使用阿里云对象存储加快图片加载速度(一)
公司有个点餐的项目有大量的图片需要在扫码后的网页进行加载,刚开始使用的客户少的时候公司的4核8G,5M带宽的服务器还能挺快的加载图片和网页,但是客户一多,由于客户大多是快餐行业的,中午点餐的人数是相当 ...
- 网页速度很慢优化方案:如何提高网页加载速度,提升网站加载速度
网站加载速度的快慢,直接影响用户的去留.这里为大家持续更新我的经验,帮你解决网页速度很慢,慢在哪里,该怎么优化的问题.希望对你有所帮助! 1. 网站空间要好:网站需要一个稳定的服务器或者虚拟机,可以 ...
- HTML 提高页面加载速度的方法
HTML 提高页面加载速度的方法: 1. 减少http请求(合并资源文件,合并图片-精灵图) 2. 把css放文件头部,javascript放body标签尾部 3. 定义图片的宽,高 4. 避免空的s ...
- vue-cli新建工程后提高页面加载速度(含升级webpack4)
2019独角兽企业重金招聘Python工程师标准>>> 提高页面加载速度的方式 升级webpack4.x及升级过程中产生问题的解决方式 webpack升级一路填坑记 图片压缩 用一个 ...
- 提高网页加载速度的一些方法和技巧
网页的加载速度是评估网站质量一个重要指标,原因在于大多数用户能够容忍的网页加载时间只有几秒,如果超出了访客的忍受范围他们会毫不留情地关掉你的网页,所以网页载入速度会极大地影响网站的流量和访问. 以下总 ...
- 【PHP】如何提高网页加载速度?
[php]如何提高网页加载速度? 1.减少页面请求: 从WEB运行原理上讲,IIS请求是无状态的,在服务器端一直是连接和关闭的不断进行着,如果能减少服务器请求,总的时间将会减少. 之前我下载163邮箱 ...
- 如何提高页面加载速度 || 前端的性能优化 || 浏览器渲染页面的过程是什么
1.降低请求量 ① 合并资源,减少http请求数量. ② lazyLoad,如图片懒加载.分批加载,每次只加载一部分. ③ 使用字体图标或CSS绘制,来代替部分图片. 2.加快请求速度 ...
- 前端性能优化——如何提高页面加载速度?
1.将样式表放在头部 首先说明一下,将样式表放在头部对于实际页面加载的时间并不能造成太大影响,但是这会减少页面首屏出现的时间,使页面内容逐步呈现,改善用户体验,防止"白屏". 我们 ...
最新文章
- 前端开发新手,这些书千万不要看!
- LiveData原理分析
- QT 防止FTP 上传软件在断连处 Crash
- ubuntu获取程序的帮助_如何在Raspberry Pi树莓派上安装Ubuntu
- android中的常用方法,android开发中常用方法总结
- 用了2年多快3年的老ASUS本子出了点小问题了
- (C语言)请编写程序,计算1-1/2-1/3-1/4-.....-1/50的和。
- C++_虚继承_虚函数_纯虚函数(多继承的二义性,多态)
- csdn中一篇sock 经验贴..
- Python3连接MySQL
- keygenerator php,学习PHP生成器的使用
- Linux虚拟机添加新硬盘的全程图解
- 走进javascript——解开switch之谜
- activity 流程编辑器_最好用的流程编辑器bpmnjs系列之Viewer
- Utrack声卡和机架包的调试
- EL表达式和JSTL标签库学习总结
- wampserver64安装时出现计算机缺少MCVR110.DLL无法安装等
- 小米路由器怎么设置无盘服务器,小米路由器怎么设置?
- balenaEtcher for mac(U盘启动盘制作工具)
- java append()_append()方法的坑