1

我想将我的函数接收到的任何 SDL_Surface 转换为 RGBA8888 格式的表面,做一些事情,然后在返回之前将其转换回原始格式。

顺便说一句,我正在使用 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 
4

2 回答 2

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 //
    /////////////////////////////////////

}
于 2013-09-25T10:51:01.937 回答
1

我从来不需要使用它,但是如果您创建一个与您的格式相对应的( link ),它看起来SDL_ConvertSurface( link ) 会满足您的需求。SDL_PixelFormatRGBA8888

于 2013-09-25T05:31:31.017 回答