1

所以我试图用 SDL 库显示一个简单的图像,但是当我使用函数 SDL_BlitSurface() 时没有任何反应,我得到的只是一个黑屏。我还应该注意,我的 .bmp 文件、源文件和可执行文件都在同一个目录中。

//SDL Header
#include "SDL/SDL.h"

int main(int argc, char* args[])
{
    //Starts SDL
    SDL_Init(SDL_INIT_EVERYTHING);

    //SDL Surfaces are images that are going to be displayed.
    SDL_Surface* Hello = NULL;
    SDL_Surface* Screen = NULL;

    //Sets the size of the window (Length, Height, Color(bits), Sets the Surface in Software Memory)
    Screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);
    //Loads a .bmp image
    Hello = SDL_LoadBMP("Hello.bmp");
    //Applies the loaded image to the screen
    SDL_BlitSurface(Hello, NULL, Screen, NULL);
    //Update Screen
    SDL_Flip(Screen);
    //Pause
    SDL_Delay(2000);
    //Deletes the loaded image from memory
    SDL_FreeSurface(Hello);
    //Quits SDL
    SDL_Quit();

    return 0;
}
4

3 回答 3

1

LoadBMP() 是废话。安装 SDL_image 库

sudo apt-get install SDL_image SDL_image_dev 

(不确定软件包的名称。只需使用 aptitude 或 synaptic 或其他任何东西来找到它们)

并将其包含在

#include "SDL_image.h"

然后加载图像

SDL_Surface* Hello = IMG_Load("Hello.bmp");
if (!Hello){
    printf("Ooops, something went wrong: %s\n", IMG_GetError());
    exit(0);
}

重要提示:请注意,您应该始终进行错误检查并打印出错误。

if (!Hello)是相同的if (Hello == NULL)

于 2012-07-10T09:13:35.570 回答
0

您是否尝试过对任何其他类型的图像进行 blitting?当我第一次启动 SDL 时,我记得 .bmp 文件存在问题。尝试 .jpg 或 .png 并回复我您的代码是否有效。

于 2012-07-09T22:48:27.910 回答
0

我有类似的“问题”;可能是预版本,或者与您的图形驱动程序不兼容的版本;让我们弄清楚。SWSurface 和翻转;我记得,翻转功能仅适用于双缓冲 HW_Surface。

Screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);

请尝试更新而不是翻转。

SDL_Update(surface);

下次:)

Hello = SDL_LoadBMP("Hello.bmp");
if(Hello != NULL) {
    //Applies the loaded image to the screen
    SDL_BlitSurface(Hello, NULL, Screen, NULL);
    //Update Screen
    ...
    //Deletes the loaded image from memory
    SDL_FreeSurface(Hello);
}

因为SDL_FreeSurface(NULL)会使您的程序崩溃。

于 2012-07-10T08:40:08.450 回答