安全高效的使用PNG图
2005-11-30 11:10
316 查看
作者:gaogao 文章来源:J2ME开发网
众所周知,J2ME程序使用的最多的图片格式为PNG格式,如何在程序中使用PNG图片对于程序来说有很多的技巧,我将以我的一些经验技巧来讨论有关PNG图片在程序中的应用。
通常情况,一个项目开始的时候策划出了需求,美工出了图片,程序员的代码也开始写了,程序员需要图片时,美工给的图片都为一张张静态的图片,然后通过引擎(或者一些工具)导成程序需要的动画序列,和图片数组,程序在Canvas中把图片数组按照图片序列标志的顺序、位置、桢数表现出来。动画是组成游戏的非常重要的部分。因而图片资源的大小、存储方式等对程序生成的jar文件的大小和耗费内存的多少有非常大的影响。在forum.nokia.com和J2ME WTK2.2的一些文档中我们可以看到一些关于图片资源如何优化的例子,在此我不予详述,但是提及,重点讲述我们的项目经验。 在一些文档中建议我们把所有的资源都放在一张足够大的PNG图片里面,我们对图片进行分割,这样做有非常大的好处,但是有一些缺点,比如我们把一张大图片读入我们的程序里面的时候,我们在菜单部分仅仅需要和菜单那部分资源,不需要其他的资源,这样我们读出的部分显得就非常的浪费内存,我们可以采取把各种图片资源分别存放到几个大图片中,这样我们需要的时候把需要的部分从jar中读到内存,不需要的时候释放出去,这样可以保证一些运算内存比较小的设备使用很多图片资源,不会发生out of memory的异常或者错误。举个例子,一个游戏有菜单、玩游戏、排行榜这样三个部分,完全可以把图片分成三组存储,和菜单相关的存储为menu.png,游戏中的存储为game.png,排行榜需要的图片存储为range.png,我们进入菜单状态只读区menu.png这样程序浪费的内存相当少,进入游戏时先释放掉menu.png占用的资源,再调入game.png。在项目中这是非常好的应用实例。 在我们的项目中,有时不需要使用切割图像,我们乐于使用一些大小一样的矩形方块状的图片(一些小的公司没有良好的引擎设计时,一般采用这种方式,一些大公司有专门做引擎的e,所以一般采用上面的方法且优化了上面的办法)。因为一些压缩算法、和图片存储格式等众多原因造成了如下状况:把很多png图形放到一张png图片里面省更多的空间。我们如何省空间呢?答案是:自己设计一个资源读取器,把需要的所有png图片读取成2进制码并且按照我们能够简单使用的格式写成一个二进制文件,我们只需要在程序中读取这个二进制文件,在把里面的png还原出来即可。我在我们的项目中发现,单独使用21张14*14的png图像,与巴这21张png重新写成一个二进制文件(不采用任何压缩算法),后者比前者在jar中节省了10KB。所以说,我们在做游戏的时候,如果没有非常好的引擎,可以采用我们办法来节省空间——把松散的图片用程序写成一个二进制文件,在j2me程序中把这些资源读取出来。 综上,我叙述了两种不同的节省资源的方法,前一种需要比较强大的引擎支持,后一种则不需要,但是后一种确实节省的不如前一种多,但比单纯的用好多png图要节省的多而且不需要复杂的引擎。在未来,我会继续写一些我们项目中的经验。
众所周知,J2ME程序使用的最多的图片格式为PNG格式,如何在程序中使用PNG图片对于程序来说有很多的技巧,我将以我的一些经验技巧来讨论有关PNG图片在程序中的应用。
通常情况,一个项目开始的时候策划出了需求,美工出了图片,程序员的代码也开始写了,程序员需要图片时,美工给的图片都为一张张静态的图片,然后通过引擎(或者一些工具)导成程序需要的动画序列,和图片数组,程序在Canvas中把图片数组按照图片序列标志的顺序、位置、桢数表现出来。动画是组成游戏的非常重要的部分。因而图片资源的大小、存储方式等对程序生成的jar文件的大小和耗费内存的多少有非常大的影响。在forum.nokia.com和J2ME WTK2.2的一些文档中我们可以看到一些关于图片资源如何优化的例子,在此我不予详述,但是提及,重点讲述我们的项目经验。 在一些文档中建议我们把所有的资源都放在一张足够大的PNG图片里面,我们对图片进行分割,这样做有非常大的好处,但是有一些缺点,比如我们把一张大图片读入我们的程序里面的时候,我们在菜单部分仅仅需要和菜单那部分资源,不需要其他的资源,这样我们读出的部分显得就非常的浪费内存,我们可以采取把各种图片资源分别存放到几个大图片中,这样我们需要的时候把需要的部分从jar中读到内存,不需要的时候释放出去,这样可以保证一些运算内存比较小的设备使用很多图片资源,不会发生out of memory的异常或者错误。举个例子,一个游戏有菜单、玩游戏、排行榜这样三个部分,完全可以把图片分成三组存储,和菜单相关的存储为menu.png,游戏中的存储为game.png,排行榜需要的图片存储为range.png,我们进入菜单状态只读区menu.png这样程序浪费的内存相当少,进入游戏时先释放掉menu.png占用的资源,再调入game.png。在项目中这是非常好的应用实例。 在我们的项目中,有时不需要使用切割图像,我们乐于使用一些大小一样的矩形方块状的图片(一些小的公司没有良好的引擎设计时,一般采用这种方式,一些大公司有专门做引擎的e,所以一般采用上面的方法且优化了上面的办法)。因为一些压缩算法、和图片存储格式等众多原因造成了如下状况:把很多png图形放到一张png图片里面省更多的空间。我们如何省空间呢?答案是:自己设计一个资源读取器,把需要的所有png图片读取成2进制码并且按照我们能够简单使用的格式写成一个二进制文件,我们只需要在程序中读取这个二进制文件,在把里面的png还原出来即可。我在我们的项目中发现,单独使用21张14*14的png图像,与巴这21张png重新写成一个二进制文件(不采用任何压缩算法),后者比前者在jar中节省了10KB。所以说,我们在做游戏的时候,如果没有非常好的引擎,可以采用我们办法来节省空间——把松散的图片用程序写成一个二进制文件,在j2me程序中把这些资源读取出来。 综上,我叙述了两种不同的节省资源的方法,前一种需要比较强大的引擎支持,后一种则不需要,但是后一种确实节省的不如前一种多,但比单纯的用好多png图要节省的多而且不需要复杂的引擎。在未来,我会继续写一些我们项目中的经验。
相关文章推荐
- 下面的类是文件下载类,支持文件的多线程断点续传,使用该类的即可安全、高效的下载任何类型的二进制文件:
- 使用PHP如何实现高效安全的ftp服务器(一)
- 使用PHP如何实现高效安全的ftp服务器(二)
- 使用PHP如何实现高效安全的ftp服务器(一)
- 使用Java继承与泛型特性创建高效与安全的DAO对象
- 使用PHP如何实现高效安全的ftp服务器(二)
- 如何使用Future和ConcurrentHashMap实现一个线程安全且高效的缓存
- android使用https安全连接
- 在iOS开发中如何高效使用静态库
- 安全专家教您正确使用漏洞扫描工具
- 使用 OpenSSL API 进行安全编程
- 高效使用vimdiff解决git merge冲突(英文版)
- PNG的使用技巧――PC端中常用的Png格式是哪些?
- PS 使用首记 修改png图片的颜色
- 使用Userlock监控用户访问 增强学校网络安全
- 【转】使用 udev 高效、动态地管理 Linux 设备文件
- 有关在IE中使用ActiveX控件时的安全提示问题
- com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误: RSA pr