SDL_SetColorKey()不删除背景色

时间:2019-01-21 23:26:08

标签: c sdl

我正在尝试设置图像的透明度。这段代码在C ++中可以正常工作,但是当我在C中尝试相同的代码时,它不再起作用。执行代码时,显示图像,但是黑色背景仍然存在。这是我正在使用的代码。谁能帮助我确定问题所在?

SDL_Texture* Utilities_loadImage( SDL_Renderer* r, const char* file )
{

    /* load an image into memory using SDL_image library function */
    SDL_Surface* surface = SDL_LoadBMP(file);
    if(!surface)
    {
        printf("error creating surface: %s\n", SDL_GetError());
        return NULL;
    }

    if(SDL_SetColorKey(surface, SDL_TRUE, SDL_MapRGB(surface->format, 0, 0, 0)) != 0)
    {
        printf("Unable to set colourkey: %s", SDL_GetError());
    }

    /* convert image into a texture for use by the grafx hardware */
    SDL_Texture* texture = SDL_CreateTextureFromSurface(r, surface);

    /* get rid of surface */
    SDL_FreeSurface(surface);
    if(!texture)
    {
        printf("error creating texture: %s\n", SDL_GetError());
        return NULL;
    }

    return texture;
}

1 个答案:

答案 0 :(得分:-1)

也许在此特定行中:

SDL_SetColorKey(surface, SDL_TRUE, SDL_MapRGB(surface->format, 0, 0, 0))

您将同一变量称为“表面”,也许您在其他变量中将其作为背景,例如:

SDL_SetColorKey(background, SDL_TRUE, SDL_MapRGB(surface->format, 0, 0, 0))

和变量surface是您尝试移动或工作的主要图像。