SDL#u CreateRGBSurfaceFrom()不';不编译?

SDL#u CreateRGBSurfaceFrom()不';不编译?,c,sdl-2,C,Sdl 2,我正在尝试使用SDL_CreateRGBSurfaceFrom从另一个曲面创建RGB曲面,因为它是TTF曲面,我想更改深度以访问曲面像素,该函数应该返回SDL_曲面*指针,但编译器说它返回int,我无法将返回指定给我的SDL_曲面*指针,这很奇怪,因为SDL_CreateRGBSurface以其应有的方式完美工作 下面是代码和编译器消息: SDL_Surface *tmp = SDL_CreateRGBSurfaceFrom(mySurface->pixels, mySurface

我正在尝试使用SDL_CreateRGBSurfaceFrom从另一个曲面创建RGB曲面,因为它是TTF曲面,我想更改深度以访问曲面像素,该函数应该返回SDL_曲面*指针,但编译器说它返回int,我无法将返回指定给我的SDL_曲面*指针,这很奇怪,因为SDL_CreateRGBSurface以其应有的方式完美工作

下面是代码和编译器消息:

SDL_Surface     *tmp = SDL_CreateRGBSurfaceFrom(mySurface->pixels, mySurface->w, mySurface->h, 32, 32 * mySurface->w, RMASK, GMASK, BMASK, AMASK);

Compiling src/main.c: error: incompatible integer to pointer conversion assigning to 'SDL_Surface *' (aka 'struct SDL_Surface *') from 'int' [-,-Wint-conversion]
  ...= SDL_CreateRGBSurfaceFrom(mySurface->pixels, mySurface->w, mySurface->h, 32, 32 * mySurface->w, RMASK, GMASK, BMASK, AMASK)
     ^ 
最小可复制程序:

# include <SDL.h>
# include <SDL_ttf.h>
# if SDL_BYTEORDER == SDL_BIG_ENDIAN
#  define RMASK 0xff000000
#  define GMASK 0x00ff0000
#  define BMASK 0x0000ff00
#  define AMASK 0x000000ff
# else
#  define RMASK 0x000000ff
#  define GMASK 0x0000ff00
#  define BMASK 0x00ff0000
#  define AMASK 0xff000000
# endif

int             main(void)
{
    SDL_Surface     *textSurface;
    SDL_Surface     *newSurface;
    TTF_Font        *font;
    SDL_Color       white = {255, 255, 255, 255};

    font = TTF_OpenFont()
    if (SDL_Init() || TTF_Init()
    || !(font = TTF_OpenFont("assets/fonts/SweetCreamy.ttf", 30))
    || !(textSurface = TTF_RenderText_Solid(font, "Test", white))
    || !(newSurface = SDL_CreateRGBSurfaceFrom(textSurface->pixels, textSurface->w, textSurface->h, 32, 32 * textSurface->w, RMASK, GMASK, BMASK, AMASK)))
        return (-1);
    SDL_FreeSurface(textSurface);
    SDL_FreeSurface(newSurface);
    TTF_Quit();
    SDL_Quit();
    return (0);
}
#包括
#包括
#如果SDL_字节顺序==SDL_BIG_ENDIAN
#定义RMASK 0xff000000
#定义GMASK 0x00ff0000
#定义BMASK 0x0000ff00
#定义AMASK 0x000000ff
#否则
#定义RMASK 0x000000ff
#定义GMASK 0x0000ff00
#定义BMASK 0x00ff0000
#定义AMASK 0xff000000
#恩迪夫
内部主(空)
{
SDL_表面*文本表面;
SDL_曲面*新曲面;
TTF_字体*字体;
SDL_颜色白色={255,255,255};
font=TTF_OpenFont()
if(SDL_Init()| | TTF_Init()
||!(font=TTF_OpenFont(“assets/fonts/sweetcrummy.TTF”,30))
||!(textSurface=TTF_RenderText_Solid(字体,“测试”,白色))
||!(newSurface=SDL_创建rgb曲面from(textSurface->pixels,textSurface->w,textSurface->h,32,32*textSurface->w,RMASK,GMASK,BMASK,AMASK)))
返回(-1);
SDL_自由曲面(textSurface);
SDL_自由曲面(新曲面);
TTF_Quit();
SDL_退出();
返回(0);
}

看起来SDL_CreateRGBSurfaceFrom是隐式定义的,因此返回一个int作为默认值。确保包含SDL.h.

如果没有告诉您未声明的函数,也会显示编译器警告。如何调用编译器?你确定你没有
#include
ing SDL1的
SDL.h
?我只下载了sdl2,所以它不能是SDL1。我正在使用生成文件进行编译,直到这个函数全部工作为止,我包括SDL.h,经典的SDL_CreateRGBSurface可以工作,但我不知道为什么SDL_CreateRGBSurfaceFrom不转换为SDL_CreateRGBSurfaceFrom肯定会返回SDL_曲面。。。另外,我也不太明白你们在这里的目标,你们在TTF Surface上的目标到底是什么?这与其说是一个答案,不如说是一个评论。不过这是一个很好的评论。问题陈述比这个答案所涉及的范围更广。此外,这个答案对OP做了什么或没有做什么做出了假设性陈述。(这确实使它成为一个比回答更好的评论。)我想访问我表面的像素,但如果不使用SDL_CreateRGBSurface初始化曲面,则无法选择字节中像素的深度,因此我无法编辑曲面,因为我的屏幕曲面的深度为32,而我的TTF曲面的深度为另一个深度,因此我们无法访问与访问32深度曲面中像素相同的像素,因此我尝试将其转换(很抱歉英语不好)