最近正在用Cocos2d-x引擎制作一款像素画风的手机游戏,人物的动画用的是帧动画(因为是像素画风,所以没考虑骨骼动画)。美工先是用ps做了一组主角跑动的帧动画,遇到了一些难点:制作过程并不是很难,但是难点在于给几十种装备统一动作,例如衣服上有一丁点细节的改变,就需要单独做一组帧动画,工作量相当大。因此想到了自己写一个专用的像素帧动画编辑器,实现美工画一件衣服,就能自动生成与之对应的几组帧动画,这样肯定方便多了。
好了,言归正传,来谈谈libpng。
libpng is the official PNG reference library. It supports almost all PNG features, is extensible, and has been extensively tested for over 19 years. The home site for development versions (i.e., may be buggy or subject to change or include experimental features) is http://libpng.sourceforge.net/, and the place to go for questions about the library is the png-mng-implement mailing list.libpng is available as ANSI C (C89) source code and requires zlib 1.0.4 or later (1.2.5 or later recommended for performance and security reasons). —— [ libpng Home Page ]
libpng 是一套免费的、公开源代码的程序库,支持对 PNG 图形文件的创建、读写等操作。libpng 使用 zlib 程序库作为压缩引擎,zlib 也是著名的 gzip (GNU zip) 所采用的压缩引擎。
也就是说libpng需要和zlib一起使用。先去这两个开源项目的主页下载源代码:
libpng->http://libmng.com/pub/png/libpng.html
zlib->http://www.zlib.net
目前(2015年3月26日)的主流版本分别是libpng 1.6.16和zlib 1.2.8
下载完毕后把libpng和zlib解压到同一个目录下,笔者的开发环境是Windows 7+Visual Studio 2012,所以运行与Visual Studio对应的lpng1616\projects\vstudiovstudio.sln
把pngtest设为启动项目,然后按Ctrl+F5(或者调试->开始执行)开始执行
短暂地编译、链接后,程序运行成功:
但是程序显示:Could not find input file pngtest.png找不到文件
别着急,这是因为程序运行的目录中没有pngtest.png文件。我们随便找一个png文件取名为pngtest.png(或者去libpng解压后的文件夹里找,那里有一个现成的pngtest.png),然后把它放到lpng1616\projects\vstudio\Debug文件夹里,手动双击运行pngtest.exe(推荐按住Shift在目录中点一下鼠标右键,选择‘在此处打开命令行窗口’,然后输入pngtest.exe。因为这样能看到pngtest.exe输出的信息)这次成功运行了,而且生成了pngout.png:
测试通过了,说明我们编译的lib库和dll文件没有问题,我们可以把它们拿到自己的程序中来用了。
打开lpng1616\projects\vstudio\Debug文件夹,找到这三个文件:
libpng16.lib
zlib.lib
libpng16.dll
这三个文件是我们真正需要的文件,这也是我们之前根据我们的计算机系统、类型编译的三个文件。(也就是说,这三个文件复制到差不多的计算机上,也是直接可以拿来用的。)
用Visual Studio新建一个空的控制台程序,笔者的项目名叫“PNGtest”。
新建文件夹PNGtest\PNGtest\LIBS,把libpng16.lib
和zlib.lib
拷贝进去
新建文件夹PNGtest\PNGtest\HEADS,把lpng1616和zlib-1.2.8目录下所有的的*.h头文件们拷贝进去(如zlib.h、png.h、pngconf.h…)
把libpng16.dll
拷贝到PNGtest\Debug目录:
打开Visual Studio界面,右键我们的项目,选择属性->配置属性->VC++目录
编辑‘包含目录’,(这个目录可以通俗地理解为存放头文件的目录。只有包含了png.h所在的目录,我们才能#include “png.h”)把$(ProjectDir)\HEADS添加进去(‘ProjectDir’表示目录’PNGtest\PNGtest’,用这个宏即使改变项目的存放位置,路径也有效):
同理,编辑‘库目录’,把$(ProjectDir)\LIBS 添加进去
最后,配置属性->链接器->输入
在附加依赖项中添加: libpng16.lib
和 zlib.lib
以上步骤完成后,我们的项目就已经和Lib库、dll文件关联起来了。
新建一个PNGtest.cpp的文件,把lpng1616\pngtest.c中的代码全部复制到我们的PNGtest.cpp文件中,ctrl+F5运行,如果效果和1.1章节中的一样(当然还需要手动引进testpng.png),那么说明lib库的引用一切正常。
今天的笔记就写到这里了,理解、操作上有不足之处还请多多指点。