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); } |
重要:请注意,您应该始终进行错误检查并打印出错误。
我有类似的"问题"; 可能是预版本,或与图形驱动程序不兼容的版本; 让我们找出来。 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时,我记得.bmp文件有问题。 尝试使用.jpg或.png格式,无论您的代码是否有效,请与我联系。