SDL创建透明表面

时间:2013-05-17 13:54:59

标签: sdl

我正在搜索如何在SDL中创建透明曲面,我发现了以下内容:http://samatkins.co.uk/blog/2012/04/25/sdl-blitting-to-transparent-surfaces/

基本上,它是:

SDL_Surface* surface;
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
surface = SDL_CreateRGBSurface(SDL_HWSURFACE,width,height,32, 0xFF000000, 0x00FF0000,        0x0000FF00, 0x000000FF);
#else
surface = SDL_CreateRGBSurface(SDL_HWSURFACE,width,height,32, 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000);
#endif

并且它有效,但它对我来说似乎非常糟糕,所以我想知道是否有更好的方法来做到这一点。

3 个答案:

答案 0 :(得分:1)

你有什么检查计算机是否使用大端或小端。 SDL是多平台的,计算机使用不同的endiannness。

该文章的作者以“平台无关”的方式撰写。如果你在PC上运行它,你可能只是使用安全:

surface = SDL_CreateRGBSurface(SDL_HWSURFACE,width,height,32, 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000);

您不需要条件。

话虽如此,代码将无法移植到使用大端元的其他平台

答案 1 :(得分:0)

我对我的IT课程有一些SDL2的经验。但是我一直在开发使用SDL的简化版函数,我加载图像的方式是这样的:

ImageId LoadBmp(string FileName, int red, int green, int blue){
SDL_Surface* image = SDL_LoadBMP(FileName.c_str()); // File is loaded in the SDL_Surface* type variable

GetDisplayError(!image, string("LoadBmp:\n Couldn't load image file ") + FileName); // Check if the file is found

Images.push_back(image); // Send the file to the Images vector


SDL_SetColorKey(Images[Images.size() - 1], SDL_TRUE, // enable color key (transparency)
    SDL_MapRGB(Images[Images.size() - 1]->format, red, green, blue)); // This is the color that should be taken as being the 'transparent' part of the image

                                                                      // Create a texture from surface (image)
SDL_Texture* Texture = SDL_CreateTextureFromSurface(renderer, Images[Images.size() - 1]);
Textures.push_back(Texture);

return Images.size() - 1; // ImageId becomes the position of the file in the vector}

你可能会寻找的是

SDL_SetColorKey(Images[Images.size() - 1], SDL_TRUE, // enable color key (transparency)
SDL_MapRGB(Images[Images.size() - 1]->format, red, green, blue)); // This is the color that should be taken as being the 'transparent' part of the image

通过这样做,您可以将给定的RGB设置为透明。希望这可以帮助!这是我正在研究的S​​DL就绪模板你应该可以使用其中的一些! https://github.com/maxijonson/SDL2.0.4-Ready-Functions-Template

答案 2 :(得分:-1)

实际上我们称之为Alpha混合,你可以在这里看一下: http://lazyfoo.net/tutorials/SDL/13_alpha_blending/index.php