一,将图片在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. 数据库每分钟运行监控SQL

    每1分钟运行一次,记录正在运行的SQL,监控数据 放在ReportServer库的t_WhoIsActive表中,保留最近30天的数据! USE [ReportServer] GO /****** O ...

  2. javascript篇-typeof,instanceof,constructor,toString判断数据类型的用法和区别

    javascript基本数据类型有:string,number,Boolean,undefined,null 引用类型(复杂类型):object, ES6中新增了一种数据类型:Symbol 以上数据类 ...

  3. CMDB资产管理

    .传统运维和自动化运维的区别: 传统运维: 1.项目上线: a.产品经理前期调研(需求分析) b.和开发进行评审 c.开发进行开发 d.测试进行测试 e.交给运维人员进行上线 上线: 直接将代码交给运 ...

  4. (转)Thread的中断机制(interrupt)

    先看收集了别人的文章,全面的了解下java的中断: 中断线程 线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡.还是等待新的 ...

  5. (转)以太坊(Ethereum)创世揭秘 以太坊(Ethereum)创世揭秘

    什么是以太坊(Ethereum) 以太坊(Ethereum)是一个基于区块链技术,允许任何人构建和使用去中心化应用的区块链平台.像比特币一样,以太坊是开源的,并由来自全世界的支持者们共同维护.与比特币 ...

  6. LR、Poly2、FM、FFM

    1. LR LR的linear Margin: 假设特征之间是相互独立的,忽略了feature pair等高阶信息:在LR中,特征组合等高阶信息是通过特征工程在特征侧引入的,那么有哪些模型不需要通过特 ...

  7. Java编写email实现内容换行

    用java编写的发送邮件要使用<br>来实现换行,而不能使用\n,或者\r\n // 5. Content: 邮件正文(可以使用html标签)(内容有广告嫌疑,避免被邮件服务器误认为是滥发 ...

  8. winhex模版

    模版数据类型: char 字符 字符数组 char[i] binary  显示为二进制 hexadecimal uint32  显示4个字节,按16进制小端显示

  9. 关于如何利用计算属性进行button的控制

    element分页没用它的 (这个只要上一页下一页),比如共2页的时候,你在第一页,你肯定可以点击下一页,当你进入到第二页的时候这个button肯定就不能点击了啊,它的属性diaabled=true让 ...

  10. 从零开始一起学习SLAM | 为什么要学SLAM?

    在<零基础小白,如何入门计算机视觉?>中我提到过,计算机视觉的研究目前主要分为两大方向:基于学习的方法和基于几何的方法.其中基于学习的方法最火的就是深度学习,而基于几何方法最火的就是视觉S ...