在本节课中,你将学会安装SDL_image扩展库。如果你掌握了安装这一个扩展库的方法,那么你将能够安装所有的扩展库。
SDL_image可从此处下载 。
另外,在你使用SDL的扩展库(SDL_image, SDL_ttf, SDL_mixer等等)时,你要确保使用了最新版的SDL,因为新版的SDL扩展库并不兼容于旧版的SDL。如果你不这么办,虽然Dev C++能够正常编译程序,但这个程序在运行时会出问题(一般是程序入口的问题)。
SDL_image可从此处下载 。
另外,在你使用SDL的扩展库(SDL_image, SDL_ttf, SDL_mixer等等)时,你要确保使用了最新版的SDL,因为新版的SDL扩展库并不兼容于旧版的SDL。如果你不这么办,虽然Dev C++能够正常编译程序,但这个程序在运行时会出问题(一般是程序入口的问题)。
1)向下滚动到Binary部分,下载Windows开发包。
每个扩展库都有3个必备的部分:
打开zip压缩包,里面应该有一个文件夹。
打开这个文件夹,里面应该包含两个子文件夹。
2)首先,打开include子文件夹,你会看到一个头文件。将这个头文件解压出来,并把它与你在第一课中从SDL目录中解压出来的其它头文件放到同一个文件夹中。
例如,我将SDL 1.2.12解压到"C:\",那么我会将头文件“SDL_image.h” (或者是“SDL_ttf.h”、 “SDL_mixer.h”)放到“C:\SDL-1.2.12\include\SDL\”。
3)下面,将压缩包中的lib子文件夹中的lib文件解压到你的SDL的lib文件夹中。在我的例子中,那就是“C:\SDL-1.2.12\lib\”。
4)现在将压缩包中所有的dll解压出来,并将它们与你的exe放到同一个文件夹中。
和前面的一样,你可以把它们拷贝到“C:\WINDOWS\SYSTEM32”下 (对于64位Windows系统,那就是“C:\Windows\SysWOW64”),这样你的SDL应用就可以找到这些dll,哪怕它们不在同一个文件夹中。但这样会有一个问题:如果你有多个使用不同版本SDL库的应用程序,这会导致版本冲突。 如果你将一个旧版的SDL放于System32中,而应用程序使用的是新版的SDL,这必然会导致问题。通常情况下,你需要把dll文件和你开发的可执行程序放在同一个目录下,并且当你发布你的应用程序时,你总是需要将dll文件与exe放在同一个目录下。
5)现在,打开你的SDL工程并进入项目属性。
6)在参数选项卡下面的连接器中,在
如果你想连接SDL_ttf,那么你就加上:
7)要使用SDL_image,确保先包含它的头文件:
每个扩展库都有3个必备的部分:
- 头文件(*.h)
- 静态库文件(*.lib)
- 动态库文件(*.dll)
打开zip压缩包,里面应该有一个文件夹。
打开这个文件夹,里面应该包含两个子文件夹。
2)首先,打开include子文件夹,你会看到一个头文件。将这个头文件解压出来,并把它与你在第一课中从SDL目录中解压出来的其它头文件放到同一个文件夹中。
例如,我将SDL 1.2.12解压到"C:\",那么我会将头文件“SDL_image.h” (或者是“SDL_ttf.h”、 “SDL_mixer.h”)放到“C:\SDL-1.2.12\include\SDL\”。
3)下面,将压缩包中的lib子文件夹中的lib文件解压到你的SDL的lib文件夹中。在我的例子中,那就是“C:\SDL-1.2.12\lib\”。
4)现在将压缩包中所有的dll解压出来,并将它们与你的exe放到同一个文件夹中。
和前面的一样,你可以把它们拷贝到“C:\WINDOWS\SYSTEM32”下 (对于64位Windows系统,那就是“C:\Windows\SysWOW64”),这样你的SDL应用就可以找到这些dll,哪怕它们不在同一个文件夹中。但这样会有一个问题:如果你有多个使用不同版本SDL库的应用程序,这会导致版本冲突。 如果你将一个旧版的SDL放于System32中,而应用程序使用的是新版的SDL,这必然会导致问题。通常情况下,你需要把dll文件和你开发的可执行程序放在同一个目录下,并且当你发布你的应用程序时,你总是需要将dll文件与exe放在同一个目录下。
5)现在,打开你的SDL工程并进入项目属性。
6)在参数选项卡下面的连接器中,在
-lmingw32 -lSDLmain -lSDL
后面附加上如下命令:-lSDL_image
如果你想连接SDL_ttf,那么你就加上:
-lSDL_ttf
-lSDL_mixer
7)要使用SDL_image,确保先包含它的头文件:
#include "SDL/SDL_image.h"
如果你在安装SDL_ttf,你就这样写:
现在扩展库就安装好了。
#include "SDL/SDL_ttf.h"
#include "SDL/SDL_mixer.h"
现在扩展库就安装好了。
现在你可以使用SDL_image的函数了。
其中,你最想了解的应该是
其中,你最想了解的应该是
IMG_Load()
函数。
SDL_Surface *load_image( std::string filename ) { //加载的图像 SDL_Surface* loadedImage = NULL; //优化后的图像 SDL_Surface* optimizedImage = NULL; //使用SDL_image加载图像 loadedImage = IMG_Load( filename.c_str() ); //如果图像加载成功 if( loadedImage != NULL ) { //创建一个优化后的图像 optimizedImage = SDL_DisplayFormat( loadedImage ); //释放原先加载的图像 SDL_FreeSurface( loadedImage ); } //返回优化后的图像 return optimizedImage; }
这是上一课中的图像加载函数的修改版。你可以看到,
从这节课开始,PNG将会是主要用到的图像格式。PNG有着极佳的无损压缩特性。
IMG_Load()
函数与SDL_LoadBMP()
函数的功能看上去完全相同,但实际上有一个很大的不同点,就是IMG_Load()
可以加载BMP, PNM, XPM, LBM, PCX, GIF, JPEG, TGA 和 PNG 格式的文件。
从这节课开始,PNG将会是主要用到的图像格式。PNG有着极佳的无损压缩特性。