SDL2 —— 使用扩展库SDL_image

2017-1-22 Plan C SDL2

www.kurukurumi.com原创,转载请注明出处。

E-mail:hubenchang0515@outlook.com

        SDL_image下载地址:http://www.libsdl.org/projects/SDL_image/

        SDL_image文档:http://www.libsdl.org/projects/SDL_image/docs/SDL_image_frame.html

        SDL2加载图片只能使用SDL_LoadBMP,这个函数只支持bmp格式的图片,但一般的bmp图片不支持透明,通常使用png来存放有透明的图片。SDL_image提供了加载更多类型图片的功能。

        使用IMG_Init函数初始化SDL_image,使用IMG_Quit函数关闭SDL_image。

#include <SDL2/SDL_image.h>
int IMG_Init(int flags);
//返回成功初始化的位,失败返回0

void IMG_Quit();

        IMG_Init的参数可以是IMG_INIT_JPG、IMG_INIT_PNG、IMG_INIT_TIF或它们的位组合。例如:

IMG_INIT(IMG_INIT_JPG | IMG_INIT_PNG | IMG_INIT_TIF);
//全部初始化成功则返回IMG_INIT_JPG | IMG_INIT_PNG | IMG_INIT_TIF
//JPG、PNG初始化成功,TIF初始化失败则返回IMG_INIT_JPG | IMG_INIT_PNG


        通过IMG_Load函数加载一张图片文件,并返回一个SDL_Surface*,参数是文件路径。

#include <SDL2/SDL_image.h>
SDL_Surface *IMG_Load(const char *file);
//成功返回指针,失败返回NULL


        通过IMG_GetError函数得到错误消息的字符串。

#include <SDL2/SDL_image.h>
char *IMG_GetError();
//返回错误消息的字符串


        下面是一段示例代码:

/*
Author : PlanC
E-mail : hubenchang0515@outlook.com
Blog   : www.kurukurumi.com
Date   : 2016-12-22
*/

#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>

int main(int argc,char* argv[])
{
    SDL_Init(SDL_INIT_EVERYTHING);
    IMG_Init(IMG_INIT_JPG);//初始化jpg
    SDL_Window* window = SDL_CreateWindow("SDL2",SDL_WINDOWPOS_CENTERED,
                                        SDL_WINDOWPOS_CENTERED,720,627,0);
    SDL_Renderer* renderer = SDL_CreateRenderer(window,-1,SDL_RENDERER_ACCELERATED);
    SDL_Surface* surface = IMG_Load("RamRem.jpg");//加载jpg图片
    SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer,surface);
    SDL_FreeSurface(surface);//释放surface
    SDL_RenderClear(renderer);
    SDL_RenderCopy(renderer,texture,NULL,NULL);
    SDL_RenderPresent(renderer);
	

    SDL_Event e;
    while(1)
    {
        SDL_PollEvent(&e);
        if(e.type == SDL_QUIT)
        {
            break;
        }
    }
    SDL_DestroyTexture(texture);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    IMG_Quit();//关闭SDL_image
    SDL_Quit();
    return 0;
}

发表评论:

Powered by emlog
鄂ICP备16003833号