我想将我的函数接收的任何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
答案 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)