一,将图片在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. linux init命令

    init命令用于切换到指定的运行级别,用法如下: [root@localhost ~]# init //关机 [root@localhost ~]# init //切换到单用户模式/救援模式 [roo ...

  2. TCP/IP协议栈基础知识

    设计思想 把一个复杂的事物进行分层划分,使得每个部分变得相对简单 分层模型 OSI分为7层模型   tcp/ip分为四层模型 应用层(Application) 传输层(Transport) 网络层(I ...

  3. 用PowerDesigner建立概念模型的问题:不能创建相同字段名的关键字段

    依次点击Tools--->Model Options->Model Settings,在Model Settings中有Data Item组框,取消里面的Unique Code,勾选All ...

  4. sap gui 配置

    1: sap gui 安全配置 ,在左下角搜索sap gui configuration.

  5. Jmeter-----邮件观察仪

    设置邮件观察仪的目的,将测试结果通过邮件的方式发送给相关的人员,可及时获取到当前测试结果情况. 说明: 本人公司使用的为腾讯企业邮箱,因此下面的介绍方式将以腾讯企业邮箱为准来进行描述 必要的设置: 邮 ...

  6. 当我的url请求会变成jsp页面路径时的解决办法

    @RequestMapping(value="shippingOrder") $.post("/ezsh/orderAd/shippingOrder",para ...

  7. 41.SEO----前端SEO技巧

    一.搜索引擎工作原理 当我们在输入框中输入关键词,点击搜索或查询时,然后得到结果.深究其背后的故事,搜索引擎做了很多事情. 在搜索引擎网站,比如百度,在其后台有一个非常庞大的数据库,里面存储了海量的关 ...

  8. npm 安装React Devtools调试工具

    有时候没有***工具时,怎么安装React DevTool, 其一直接搜索到Chrome的插件安装即可. 其二, 可以通过下载github上的react-devtools, 然后打包,最后导入chro ...

  9. 关于toolchain(工具链)的一点知识

    之前一直觉得toolchain是个高大上的东西,现摘录 uClibc中的FAQ以助理解. A toolchain consists of GNU binutils, the gcc compiler, ...

  10. object base基类分析

    uvm_object,是所有uvm data和hierarchical class的基类,实现了copy,compare,print,record之类的函数 扩展类中必须实现create和get_ty ...