所以我试图用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;
}
答案 0 :(得分: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)
答案 1 :(得分:0)
答案 2 :(得分:0)
我有类似的“问题”;也许它是一个预版本,或者与你的图形驱动程序不兼容的版本;让我们弄清楚。 SWSurface和Flip;我记得,翻转功能只适用于双缓冲的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)
会导致程序崩溃。