C 如何将任何SDL_曲面转换为RGBA8888格式并返回?
我想将函数接收到的任何SDL_曲面转换为RGBA8888格式的曲面,执行一些操作,并在返回之前将其转换回原始格式 顺便说一下,我在C工作C 如何将任何SDL_曲面转换为RGBA8888格式并返回?,c,sdl,C,Sdl,我想将函数接收到的任何SDL_曲面转换为RGBA8888格式的曲面,执行一些操作,并在返回之前将其转换回原始格式 顺便说一下,我在C工作 //------------------------------------------------ #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <SDL/SDL.h> #include <SDL/SDL_image
//------------------------------------------------
#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
我从未使用过它,但如果创建一个与RGBA8888格式相对应的SDL_像素格式,SDL_ConvertSurface似乎可以满足您的需要。我从未使用过它,但如果创建与RGBA8888格式相对应的SDL_像素格式,SDL_ConvertSurface似乎可以满足您的需要。假设您拥有的曲面称为曲面且有效,即不为空
// 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 //
/////////////////////////////////////
}
假设您拥有的曲面称为曲面且有效,即不为空
// 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 //
/////////////////////////////////////
}
什么是RGBA8888格式?他是指32位RGBA,每个通道8位,请参见@Zamallad的建议。这正是我想做的。显然,无法获得正确的包含。您使用的是SDL1.2还是SDL2?甚至不确定这是否有什么不同,但有兴趣知道什么是RGBA8888格式?他指的是32位RGBA,每个通道8位。请参阅@Zamalld的建议。这正是我想做的。显然,无法获得正确的包含。您使用的是SDL1.2还是SDL2?我甚至不确定这会有什么不同,但我很想知道,谢谢!也许我当时遇到了一个include问题,因为我无法得到任何东西——EclipseCDT、scons、gcc——来识别SDL_PIXELFORMAT_RGBA8888。你的建议和我最初尝试的差不多。该代码段需要包含哪些内容?Hi刚刚进行了更正,出于兼容性原因,将convert surface函数中的最后一个参数从NULL更改为0。包括SDL.h应该足以让它起作用。也许你可以在pastebin上发布完整的代码?这也可能是链接器的问题。你有没有在SDL中运行过任何东西——只是一个普通的窗口,或者在网上画一个位图——很多教程都有。这是我用Wesnoth代码库做的一个实验。不幸的是,我感到沮丧和git重置困难,所以我没有什么可以给你看的。更多信息请参见上文。谢谢!也许我当时遇到了一个include问题,因为我无法得到任何东西——EclipseCDT、scons、gcc——来识别SDL_PIXELFORMAT_RGBA8888。你的建议和我最初尝试的差不多。该代码段需要包含哪些内容?Hi刚刚进行了更正,出于兼容性原因,将convert surface函数中的最后一个参数从NULL更改为0。包括SDL.h应该足以让它起作用。也许你可以在pastebin上发布完整的代码?这也可能是链接器的问题。你有没有在SDL中运行过任何东西——只是一个普通的窗口,或者在网上画一个位图——很多教程都有。这是我用Wesnoth代码库做的一个实验。不幸的是,我感到沮丧和git重置困难,所以我没有什么可以给你看的。请参阅上文了解更多信息。请参阅上文了解在您发表评论后添加的有关我的问题的更多详细信息。谢谢。有关我的问题的更多细节,请参见上文,这些细节是在您发表评论后添加的。谢谢