翻译声明:
本文来自 Dev Hub,一切解释权归原作者。我只是出自个人爱好,才翻译了本文。因为本人也是个初学者,而且英语水平有限,错误难免,望各路高手指正。
本课原文地址:http://www.sdltutorials.com/sdl-image/
本教程相当简单,简短,有趣。我将向你介绍如何不再使用那些令人讨厌的位图(BMP)文件,因为他们太大了也不支持alpha透明,然后开始为你的那些表面使用其他文件格式(我个人比较喜欢PNG)。如果你还没读过我的“SDL 坐标和块复制”这课,还是现在就去看看吧。我们就从那篇教程开始,修改CSurface类的一个OnLoad()函数。
首先,你需要先下载SDL_image,可以从SDL的官网获取最新版本。你也可以从其中的“Libraries”章节下载这个库,就在SDL的主页上。如果你不想为此麻烦,我提供的SDL包对于大多数SDL初学者都很有帮助,里面包含了SDL_image和其他一些有用的库。一定要保证其头文件和你的SDL头文件在同一目录下,还有库文件也要和你的SDL库文件路径一致,这会省去很多麻烦。
先打开你的工程,到连接器设置下。在SDLmain后面添加SDL_image,如下:
mingw32
SDLmain
SDL_image
SDL
如果你忘了怎么找到这些设置,还是希望你复习一下“SDL课程基础”来温习一下连接器这块。
首先,打开CSurface.h,然后我们就可以包括更多的头文件了:
#ifndef _CSURFACE_H_
#define _CSURFACE_H_
#include <SDL.h>
#include <SDL_image.h>
完成至此,打开CSurface.cpp,找到OnLoad函数。目前,我们的代码如下:
SDL_Surface* CSurface::OnLoad(char* File) {
SDL_Surface* Surf_Temp = NULL;
SDL_Surface* Surf_Return = NULL;
if((Surf_Temp = SDL_LoadBMP(File)) == NULL) {
return NULL;
}
Surf_Return = SDL_DisplayFormat(Surf_Temp);
SDL_FreeSurface(Surf_Temp);
return Surf_Return;
}
这里要做两点改变,首先是把SDL_LoadBMP改成IMG_Load。其次,把SDL_DisplayFormat改成SDL_DisplayFormatAlpha。还记得我说过BMP文件不支持alpha通道的吧?但是,PNG却支持!如果你想留住alpha通道,那就需要用SDL_DisplayFormatAlpha来代替SDL_DisplayFormat。如此一来,我们的代码就成了这个样子了:
SDL_Surface* CSurface::OnLoad(char* File) {
SDL_Surface* Surf_Temp = NULL;
SDL_Surface* Surf_Return = NULL;
if((Surf_Temp = IMG_Load(File)) == NULL) {
return NULL;
}
Surf_Return = SDL_DisplayFormatAlpha(Surf_Temp);
SDL_FreeSurface(Surf_Temp);
return Surf_Return;
}
最后,别忘了改变CApp_OnInit.cpp里的测试表面要加载的文件名:
if((Surf_Test = CSurface::OnLoad("myimage.png")) == NULL) {
return false;
}
这样我们就完成了!我说过的很短的吧。试试编译下,然后试试不同格式的文件。SDL_image支持的一般格式有:
BMP (Go figure)
GIF
PNG
JPG
PCX
TIF
and others…
请注意下现在需要的和SDL图像相关的附加DLL文件(大概有5个)。保证这些都包含在你的工程里了。你可以从此下载这些DLL文件,http://www.libsdl.org/projects/SDL_image/ 在Binary -> Win32 -> 下的Win32 Zip(而不是VC8)(译注:原作者用的是CB,用微软VS的要用这个。)。并且这些DLL文件也包含在工程文件下面。
本教程来自Blommis的创意。
SDL图像 —— 课程文件:
Win32: Zip, Rar
Linux: Tar (Thanks Gaten), Binary (Thanks Thomas)
本文来自 Dev Hub,一切解释权归原作者。我只是出自个人爱好,才翻译了本文。因为本人也是个初学者,而且英语水平有限,错误难免,望各路高手指正。
本课原文地址:http://www.sdltutorials.com/sdl-image/
本教程相当简单,简短,有趣。我将向你介绍如何不再使用那些令人讨厌的位图(BMP)文件,因为他们太大了也不支持alpha透明,然后开始为你的那些表面使用其他文件格式(我个人比较喜欢PNG)。如果你还没读过我的“SDL 坐标和块复制”这课,还是现在就去看看吧。我们就从那篇教程开始,修改CSurface类的一个OnLoad()函数。
首先,你需要先下载SDL_image,可以从SDL的官网获取最新版本。你也可以从其中的“Libraries”章节下载这个库,就在SDL的主页上。如果你不想为此麻烦,我提供的SDL包对于大多数SDL初学者都很有帮助,里面包含了SDL_image和其他一些有用的库。一定要保证其头文件和你的SDL头文件在同一目录下,还有库文件也要和你的SDL库文件路径一致,这会省去很多麻烦。
先打开你的工程,到连接器设置下。在SDLmain后面添加SDL_image,如下:
mingw32
SDLmain
SDL_image
SDL
如果你忘了怎么找到这些设置,还是希望你复习一下“SDL课程基础”来温习一下连接器这块。
首先,打开CSurface.h,然后我们就可以包括更多的头文件了:
#ifndef _CSURFACE_H_
#define _CSURFACE_H_
#include <SDL.h>
#include <SDL_image.h>
完成至此,打开CSurface.cpp,找到OnLoad函数。目前,我们的代码如下:
SDL_Surface* CSurface::OnLoad(char* File) {
SDL_Surface* Surf_Temp = NULL;
SDL_Surface* Surf_Return = NULL;
if((Surf_Temp = SDL_LoadBMP(File)) == NULL) {
return NULL;
}
Surf_Return = SDL_DisplayFormat(Surf_Temp);
SDL_FreeSurface(Surf_Temp);
return Surf_Return;
}
这里要做两点改变,首先是把SDL_LoadBMP改成IMG_Load。其次,把SDL_DisplayFormat改成SDL_DisplayFormatAlpha。还记得我说过BMP文件不支持alpha通道的吧?但是,PNG却支持!如果你想留住alpha通道,那就需要用SDL_DisplayFormatAlpha来代替SDL_DisplayFormat。如此一来,我们的代码就成了这个样子了:
SDL_Surface* CSurface::OnLoad(char* File) {
SDL_Surface* Surf_Temp = NULL;
SDL_Surface* Surf_Return = NULL;
if((Surf_Temp = IMG_Load(File)) == NULL) {
return NULL;
}
Surf_Return = SDL_DisplayFormatAlpha(Surf_Temp);
SDL_FreeSurface(Surf_Temp);
return Surf_Return;
}
最后,别忘了改变CApp_OnInit.cpp里的测试表面要加载的文件名:
if((Surf_Test = CSurface::OnLoad("myimage.png")) == NULL) {
return false;
}
这样我们就完成了!我说过的很短的吧。试试编译下,然后试试不同格式的文件。SDL_image支持的一般格式有:
BMP (Go figure)
GIF
PNG
JPG
PCX
TIF
and others…
请注意下现在需要的和SDL图像相关的附加DLL文件(大概有5个)。保证这些都包含在你的工程里了。你可以从此下载这些DLL文件,http://www.libsdl.org/projects/SDL_image/ 在Binary -> Win32 -> 下的Win32 Zip(而不是VC8)(译注:原作者用的是CB,用微软VS的要用这个。)。并且这些DLL文件也包含在工程文件下面。
本教程来自Blommis的创意。
SDL图像 —— 课程文件:
Win32: Zip, Rar
Linux: Tar (Thanks Gaten), Binary (Thanks Thomas)