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_OBJECT public:
explicit Widget(QWidget *parent = );
~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 3 Widget::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); //
for(int i = ; i < line; i++)
{
uchar* lineData = image.scanLine(i);
for(int j = ; j < sizePerLine; j++)
{
file.write((char*)(lineData + j),);
}
} 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 = ;
int g = ;
int r = ;
int a = ; //设置像素
for (int i=;i < m_imgHeight;i++)
{
for (int j=; j < m_imgWidth * ;)
{
b = (int)*(imgDataNew + i * m_imgWidth * + j);
g = (int)*(imgDataNew + i * m_imgWidth * + j + );
r = (int)*(imgDataNew + i * m_imgWidth * + j + );
a = (int)*(imgDataNew + i * m_imgWidth * + j + );
desImage.setPixel(j / ,i,qRgba(r,g,b,a));
j = j + ;
//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绘制黑白
qt 提高图片加载速度的更多相关文章
- jquery实现图片预加载提高页面加载速度
使用jquery实现图片预加载提高页面加载速度和用户体 我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好.那么如何解决这个问题 呢?首 ...
- Web前端性能优化总结——如何提高网页加载速度
一.提高网页加载速度的必要性 国际知名的一组来自Jupiter Research的数据显示:购物者在访问网站过程中的不满会导致销售损失和品牌受损,其中 77%的人将不再访问网站 ,62%的人不再从该网 ...
- 对WEB标准以及W3C的理解与认识 - 提高网页加载速度
在写代码的时候应该注意: 1.标签闭合 2.标签小写 3.不能随意嵌套 提高被搜索引擎搜到几率: mate中的name变量[其中keywords和description尤其重要] Meta name= ...
- iOS 图片加载速度优化
FastImageCache 是 Path 团队开发的一个开源库,用于提升图片的加载和渲染速度,让基于图片的列表滑动起来更顺畅,来看看它是怎么做的. 一.优化点 iOS 从磁盘加载一张图片,使用 UI ...
- jQuery实现图片预加载提高页面加载速度和用户体验
我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好.那么如何解决这个问题呢?首先我们会想到的是提高服务器性能,使用静态缓存等手段来加快图 ...
- Web前端性能优化——如何提高页面加载速度
前言: 在同样的网络环境下,两个同样能满足你的需求的网站,一个"Duang"的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网页时间是2-5秒, ...
- 【转】Web前端性能优化——如何提高页面加载速度
前言: 在同样的网络环境下,两个同样能满足你的需求的网站,一个“Duang”的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网页时间是2-5秒,如果等待超过10秒, ...
- Nginx开启Gzip压缩提高页面加载速度
本文转自http://www.veryhuo.com/a/view/51706.html,如有侵权,请及时联系转载人删除! 在实际运维中,为了提高web页面的访问加载速度,一般会把静态资源(比如js. ...
- Web前端性能优化——提高页面加载速度
前言: 在同样的网络环境下,两个同样能满足你的需求的网站,一个“Duang”的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网页时间是2-5秒,如果等待超过10秒, ...
随机推荐
- RadioButton使用
RadioButton和CheckBox差不多,这里只写一个,因为我本身不是学andorid,所以就当给自己留一个备份,省的每次用到都需要代码敲一次,很麻烦 1.如果想选中时想改变颜色可以设置一个xm ...
- react native获取屏幕的宽度和高度
var Dimensions = require('Dimensions'); var {width,height} = Dimensions.get("window");//第一 ...
- sap 查看类的修饰属性
- 【Linux】-NO.9.Linux.5.Nexus.1.001-【CentOS 7 Install Nexus 3.3】-
1.0.0 Summary Tittle:[Linux]-NO.9.Linux.5.Nexus.1.001-[CentOS 7 Install Nexus 3.3]- Style:Linux Seri ...
- [LeetCode] 105. Construct Binary Tree from Preorder and Inorder Traversal_Medium tag: Tree Traversal
Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that ...
- linux shell脚本检测硬盘磁盘空间 邮件报警
使用 http://www.weiruoyu.cn/?p=368 shell脚本监控硬盘空间剩余空间 邮件报警 1.先观察一下磁盘,和如何使用脚本 [root@localhost ~]# df -h ...
- Go linux 实践4
这是目前学习的最难的Go demo例子 ***************************************** 如果能看懂,你就出师了,我的任务也就结束了 **************** ...
- unity3d射线控制移动
看看效果图 代码: using UnityEngine; using System.Collections; public class T2 : MonoBehaviour { // Use this ...
- RCNN系列算法的发展
一. RCNN系列的发展 1.1 R-CNN 根据以往进行目标检测的方法,在深度学习应用于目标检测时,同样首先尝试使用滑动窗口的想法,先对图片进行选取2000个候选区域,分别对这些区域进行提取特征以 ...
- 关于double精确度的简单问题
(1)测试TestDouble.java结果 结果:如图,使用double类型的数据进行运算时结果是不准确的. 原因:double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位 ...