关于c ++:SDL_BlitSurface()不显示图像?

SDL_BlitSurface() not displaying image?

所以我试图用SDL库显示一个简单的图像,但是当我使用函数SDL_BlitSurface()时,什么也没有发生,而我得到的只是一个黑屏。 我还应注意,我的.bmp文件,源文件和可执行文件都位于同一目录中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//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;
}

LoadBMP()是废话。 安装SDL_image库

1
sudo apt-get install SDL_image SDL_image_dev

(不确定软件包的名称。只需使用aptitude或synaptic或其他方法即可找到它们)

并包括

1
#include"SDL_image.h"

您加载图像然后

1
2
3
4
5
6
SDL_Surface* Hello = IMG_Load("Hello.bmp");
if (!Hello){
    printf("Ooops, something went wrong: %s
"
, IMG_GetError());
    exit(0);
}

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

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


我有类似的"问题"; 可能是预版本,或与图形驱动程序不兼容的版本; 让我们找出来。 SWSurface和Flip; 我记得,翻转功能仅适用于双缓冲HW_Surface。

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

请尝试更新而不是翻转。

1
SDL_Update(surface);

下次:)

1
2
3
4
5
6
7
8
9
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)将使您的程序崩溃。


您是否尝试过涂抹其他类型的图像? 第一次启动SDL时,我记得.bmp文件有问题。 尝试使用.jpg或.png格式,无论您的代码是否有效,请与我联系。