如何将任何SDL_Surface转换为RGBA8888格式并返回?

时间:2013-09-25 00:23:34

标签: c sdl

我想将我的函数接收的任何SDL_Surface转换为RGBA8888格式表面,执行 stuff ,并在返回之前将其转换回原始格式。

顺便说一下,我在C工作。

//------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
//------------------------------------------------
SDL_Surface* formattedSurf = SDL_ConvertSurfaceFormat(surf, 
                                                      SDL_PIXELFORMAT_RGBA8888, 
                                                      0);

产生:“问题描述:符号'SDL_PIXELFORMAT_RGBA8888'无法解析”来自Eclipse CDT和来自gcc的类似响应。

[Thu 13/09/26 14:40 PDT][pts/3][x86_64/linux-gnu/3.11.1-1-ARCH][5.0.2]
<justin@justin-14z:/tmp>
zsh/2 1821 % pkg-config --cflags --libs sdl
-D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL -lSDL -lpthread 

2 个答案:

答案 0 :(得分:4)

假设您拥有的表面被称为surface并且有效,即不是NULL

// Store the current pixel format flag
Uint32 currFormat = surface->format->format;

// Convert the surface to a new one with RGBA8888 format
SDL_Surface* formattedSurf = SDL_ConvertSurfaceFormat(surf, 
                                                      SDL_PIXELFORMAT_RGBA8888, 
                                                      0);

if (formattedSurf != NULL) {

    // Free original surface
    SDL_FreeSurface(surface);

    ////////////////////////
    // DO YOUR STUFF HERE //
    ////////////////////////

    // Re-create original surface with original format
    surface = SDL_ConvertSurfaceFormat(formattedSurf, currFormat, NULL);

    // Free the formatted surface
    SDL_FreeSurface(formattedSurf);

}
else {

    /////////////////////////////////////
    // LOG A WARNING OR SOMETHING HERE //
    /////////////////////////////////////

}

答案 1 :(得分:1)

我从来没有使用它,但如果你创建一个对应的SDL_ConvertSurfacelink),SDL_PixelFormatlink)看起来就像你需要的那样您的RGBA8888格式。