一,将图片在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 提高图片加载速度的更多相关文章

  1. jquery实现图片预加载提高页面加载速度

    使用jquery实现图片预加载提高页面加载速度和用户体 我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好.那么如何解决这个问题 呢?首 ...

  2. Web前端性能优化总结——如何提高网页加载速度

    一.提高网页加载速度的必要性 国际知名的一组来自Jupiter Research的数据显示:购物者在访问网站过程中的不满会导致销售损失和品牌受损,其中 77%的人将不再访问网站 ,62%的人不再从该网 ...

  3. 对WEB标准以及W3C的理解与认识 - 提高网页加载速度

    在写代码的时候应该注意: 1.标签闭合 2.标签小写 3.不能随意嵌套 提高被搜索引擎搜到几率: mate中的name变量[其中keywords和description尤其重要] Meta name= ...

  4. iOS 图片加载速度优化

    FastImageCache 是 Path 团队开发的一个开源库,用于提升图片的加载和渲染速度,让基于图片的列表滑动起来更顺畅,来看看它是怎么做的. 一.优化点 iOS 从磁盘加载一张图片,使用 UI ...

  5. jQuery实现图片预加载提高页面加载速度和用户体验

    我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好.那么如何解决这个问题呢?首先我们会想到的是提高服务器性能,使用静态缓存等手段来加快图 ...

  6. Web前端性能优化——如何提高页面加载速度

    前言:  在同样的网络环境下,两个同样能满足你的需求的网站,一个"Duang"的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网页时间是2-5秒, ...

  7. 【转】Web前端性能优化——如何提高页面加载速度

    前言:  在同样的网络环境下,两个同样能满足你的需求的网站,一个“Duang”的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网页时间是2-5秒,如果等待超过10秒, ...

  8. Nginx开启Gzip压缩提高页面加载速度

    本文转自http://www.veryhuo.com/a/view/51706.html,如有侵权,请及时联系转载人删除! 在实际运维中,为了提高web页面的访问加载速度,一般会把静态资源(比如js. ...

  9. Web前端性能优化——提高页面加载速度

    前言:  在同样的网络环境下,两个同样能满足你的需求的网站,一个“Duang”的一下就加载出来了,一个纠结了半天才出来,你会选择哪个?研究表明:用户最满意的打开网页时间是2-5秒,如果等待超过10秒, ...

随机推荐

  1. RN NetInfo使用

    代码: class NetInfoView extends Component { getNetInfo() { //如果是andorid的程序,需要在xml添加获取网络请求权限 NetInfo.fe ...

  2. Python创建目录

    需要包含os模块进来,使用相关函数即可实现目录的创建 1.创建目录要用到的函数: (1)os.path.exists(path) 判断一个目录是否存在 (2)os.makedirs(path) 多层创 ...

  3. 数据库---mysql内置功能

    一.视图 简介: 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用.使用视图我们可以把查询过 ...

  4. (转)Geth控制台使用及Web3.js使用实战

    在开发以太坊去中心化应用,免不了和以太坊进行交互,那就离不开Web3.Geth 控制台(REPL)实现了所有的web3 API及Admin API,使用好 Geth 就是必修课.结合Geth命令用法阅 ...

  5. Django 框架 数据库操作2

    一.ORM的操作方法总结 get(self, *args, **kwargs): # 获取单个对象 def one_get(request): #直接得到一个表对象,也就是表记录 如果得到多个会报错 ...

  6. DL中epoch、batch等的意义【转载】

    转自:深度学习中 number of training epochs 中的 epoch到底指什么? - 知乎 https://www.zhihu.com/question/43673341 1. (1 ...

  7. 【UML】-NO.43.EBook.5.UML.1.003-【UML 大战需求分析】- 状态机图(State Machine Diagram)

    1.0.0 Summary Tittle:[UML]-NO.43.EBook.1.UML.1.003-[UML 大战需求分析]- 状态机图(State Machine Diagram) Style:D ...

  8. python3 判断字符串是否为IP

    #!/usr/bin/python3 # -*- coding: utf-8 -*- import re ip = "192.168.1.1" ip = re.findall(&q ...

  9. js图的数据结构处理----邻链表,广度优先搜索,最小路径,深度优先搜索,探索时间拓扑

    //邻居连表 //先加入各顶点,然后加入边 //队列 var Queue = (function(){ var item = new WeakMap(); class Queue{ construct ...

  10. xmlns:dubbo 路径错误

    It goes normal when change <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...