基于HGE引擎使用C++从zip加密压缩包中读取图像文件至内存并显示在窗口中

选择一个要显示的图像文件

password为密码压缩为zip

代码

showZipImg.cpp

#include "hge.h"
#include "hgeSprite.h"
//#pragma comment(linker, "/NODEFAULTLIB:libc.lib")
HGE* hge = 0;//创建HGE指针
hgeSprite* spr;//创建精灵类指针
HTEXTURE tex;//定义一个texture(纹理)对象bool RenderFunc()//绘制函数,程序开始后HGE将不停调用它
{hge->Gfx_BeginScene();//开始渲染hge->Gfx_Clear(0xFF000000);//以某颜色清屏,OxFF000000为透明度为0的黑色spr->Render(0,0);//在指定位置显示精灵hge->Gfx_EndScene();//结束渲染return false;//总是返回false
}
bool FrameFunc()//逻辑函数,程序开始后HGE将不停调用它,一些逻辑判断或者处理可以写在这里。
{return false;//程序正常时总是返回false,返回true将从System_Start往下执行
}int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)//WinMain函数,程序的入口。
{hge = hgeCreate(HGE_VERSION);//使用hgeCreate函数创建HGE接口,参数必须传递正确的HGE_VERSION,它是在hge.h中定义的hge->System_SetState(HGE_SCREENWIDTH, 800);//将屏幕宽度设置为800hge->System_SetState(HGE_SCREENHEIGHT, 600);//将屏幕高度设置为600hge->System_SetState(HGE_FRAMEFUNC, FrameFunc);//设置逻辑函数为FrameFunc函数hge->System_SetState(HGE_RENDERFUNC, RenderFunc);//设置绘制函数为RenderFunc函数hge->System_SetState(HGE_TITLE, "显示图像");//设置窗口标题为“显示图像”hge->System_SetState(HGE_WINDOWED, true);//设置使用窗口模式hge->System_SetState(HGE_USESOUND, false);//设置不使用声音(第二个程序我们先不讲解声音的知识)DWORD size = 0;hge->Resource_AttachPack("../data.zip","password");//将压缩包资源加载到资源队列void* data = hge->Resource_Load("man.jpg", &size); //加载资源,返回资源大小if (hge->System_Initiate())//用hge类的System_Initiate()方法,检测初始化是否有错误出现。{tex = hge->Texture_Load((const char*)data, size);//根据路径载入图片if (tex)//检测是否图片成功载入spr = new hgeSprite(tex,0,0,245,245);//初始化精灵spr,并且指定tex为它的纹理hge->System_Start();//如果没有问题,则使用System_Start方法,开始程序。}hge->Texture_Free(tex);//释放纹理delete spr;//释放精灵hge->Resource_RemoveAllPacks();//删除资源队列中的所有资源hge->System_Shutdown();//程序停止hge->Release();//释放HGE所占用的内存。
}

编译运行


我们在市场上买了一个游戏,很少会轻易的看到游戏目录里一堆的BMP,PCX资源图片。难道他们不使用BMP之类的文件作为图片资源吗?非也,其实他们把这些资源图片进行了打包、压缩。

举几个游戏的例子吧,大名鼎鼎westernwood的《红色警戒》的.mix文件就是一种压缩包,里面包含了一堆堆的游戏图片,声音等资源。还有blizzard的《星际争霸》、《暗黑破坏神》、《魔兽系列》的.mpq文件也是一种压缩包,里面包含了各种游戏使用的资源。几乎所有的游戏都用到了压缩包。

那么为什么要使用这种压缩包呢?原因很多,首先就是压缩,游戏中使用的图片等资源都是极其适合压缩的,这样就减小了游戏的体积。如果把《红色警戒2》的资源全部解开相信会超过3G。其次压缩后文件体积的减小会带来读盘速度的显著提高。通常一个2M的BMP文件可以被压缩到700K以内,读取一个2M的文件和读取一个700K的文件然后再内存中解压的速度对比是可想而知的。最后,将大量的资源文件打包能使得游戏目录清晰,而不是一堆堆的文件夹和文件,这样能减少磁盘空间的浪费,也减少了磁盘碎片。

【HGE】使用C++从加密压缩包中读取图像文件并显示相关推荐

  1. emwin从外部flash中读取bmp图片显示

    在emwin中有提供了一个从外部读取图片数据进行显示的函数,如下: 而且提供了官方例程,不过官方历程中从外部读取是从外部文件系统中进行读取的bmp图片进行显示,官方例程如下 /* ********** ...

  2. QT中读取STL并显示

    STL数据格式有两种一种是二进制 一种是ASCII STL另外一种是Binary STL. 目录 Binary 二进制: ASCII STL Binary 二进制: 二进制STL文件用固定的字节数来给 ...

  3. 用JSP从数据库中读取图片并显示在网页上

    环境:mysql+tomcat: <1>先在mysql下建立如下的table. 并insert图像.  mysql.sql文件如下: CREATE TABLE photo ( photo_ ...

  4. 基于R语言或Matlab直接读取压缩包中的数据

    写在前面 以gosif网站上的tiff数据为例. 该数据是地学上常用的一种数据,希望读取该网站上的gosif数据:http://data.globalecology.unh.edu/data/GOSI ...

  5. 暴力破解zip加密压缩包

    最近恰好有个压缩包要解密,所以稍微研究了一下该怎么去破解加密的压缩包(zip,rar在道理上是一样的).由于现有的方法中没想到高级的破解方式,所以只有暴力破解压缩包了. 暴力破解压缩包的原理很简单,就 ...

  6. 5G信令(就是用户身份信息)——手机开机后,先从USIM中读取之前运营商分配的临时身份信息GUTI/TMSI,发送携带该身份信息的信令给基站,请求接入运营商网络。...

    5G时代,跟IMSI-CATCHER SAY GOODBYE from:https://unicorn.360.com/blog/2018/04/18/GoodBye_5G_IMSI-Catcher/ ...

  7. python中读取文件内容-深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

  8. 在Silverlight中读取指定URL图片包数据

    在silverlight开发,允许我们获取指定URL压缩包(zip)并读取其中的图片文件.而实现这个功能也 非常简单.下面是运行效果图:                 首先,我们需要建立一个silv ...

  9. 计算机目录读取,从项目目录中读取SQL查询文件(Read SQL query file from project directory)...

    从项目目录中读取SQL查询文件(Read SQL query file from project directory) 我在Visual Studio项目中放置了3个特别大的SQL查询,位于项目目录中 ...

  10. PGP在加密技术中的应用

    PGP在加密技术中的应用 任务一 PGP软件的安装 1.安装并选择默认语言. 2.接受安装协议 3.选择第二项-不显示发行说明. 4.选择no-不重新启动系统. 5.选择patch(建议关闭声音)-重 ...

最新文章

  1. 接口测试要如何做数据准备
  2. jmeter性能测试入门简介
  3. Android开发技术周报 Issue#52
  4. iOS逆向工程(简单利用dumpdecrypted给ipa砸壳)
  5. win7插了耳机还是外放_有哪些令人叫绝的智障设计?网友:手机取消耳机孔
  6. 景深决定照相机什么特性_手机为什么达不到相机的景深效果?
  7. 若依前后端分离版本如何使用Swagger
  8. python3.7shell显示行数_XShell远程CentOS7,Python3命令行下按方向键出现的乱码问题...
  9. python - class类 (七) 三大特性 - 封装 结尾
  10. C#读取或设置ScrollLock
  11. 陈冠希英文道歉信难词深度剖析
  12. xencenter教程
  13. Dagger2的简单使用及基本原理
  14. WS824的电话交换机设置分机号
  15. 一淘网发声明否认胁迫导航网站合作
  16. 车间调度建模系列7|扩展析取图之基于设备偏好的三维析取图模型
  17. 使用pandas的merge出现Empty DataFrame 和 Index: []
  18. OpenCV+Python 彩色图片的 BGR、灰度图、HSV分量图显示的程序
  19. CodeForces - 985A Chess Placing(水)
  20. 3D汽车作品大赏!汇集世界各地CG大佬们的“汽车梦”

热门文章

  1. C语言数组相似度比对,C语言实验报告:碱基相似度比较
  2. win7如何修改html图标,Win7如何更改软件图标?Win7更改软件图标的方法
  3. hp服务器装2012系统还原,用HP GEN8+WIN2012+Hyper V+黑群晖5.2组建家庭NAS中心 篇四:WIN 2012 安装 存储池调试及修复...
  4. Unity制作AR小程序
  5. OpenCV计算机视觉(二) —— 图像的算数运算与逻辑运算
  6. ip关联是什么意思,亚马逊如何防止ip关联(ip关联过多是什么意思)
  7. 电脑横机服务器维修,电脑横机常见问题的处理方法
  8. 朱义晨作业 17037099
  9. 数据库系统概论判断题
  10. 又要放大招了 监控中干扰如何消除你可知道?