SDL 图像

翻译声明:
    本文来自
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)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值