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)
發佈了8 篇原創文章 · 獲贊 11 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章