【发布时间】:2018-04-23 07:15:32
【问题描述】:
我在 SDL 窗口中显示图像时遇到问题,我不太确定自己做错了什么。代码编译得很好,图像已与我的 .exe 一起放在调试文件夹中,所以我不确定它为什么不显示。有没有我可能遗漏的小事?
#include <iostream>
#include <stdio.h>
#include <SDL.h>
#undef main
using namespace std;
const int screenWidth = 640;
const int screenHeight = 480;
int main(int argc, char* args[]) {
SDL_Window* window = SDL_CreateWindow("Game", SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, screenWidth, screenHeight, SDL_WINDOW_SHOWN);
SDL_Surface* image = SDL_LoadBMP("image.bmp");
SDL_Renderer* render = SDL_CreateRenderer(window, -1, 0);
SDL_Texture* texture1 = SDL_CreateTextureFromSurface(render, image);
SDL_RenderCopy(render, texture1, NULL, NULL);
SDL_RenderPresent(render);
SDL_UpdateWindowSurface(window);
SDL_Delay(5000);
SDL_DestroyTexture(texture1);
SDL_DestroyRenderer(render);
SDL_FreeSurface(image);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
【问题讨论】:
-
image的值是多少?如果为 NULL,SDL_GetError()说什么?相对路径是相对于当前工作目录的,而不是“.exe 文件夹”,这可能是完全不同的东西。删除SDL_UpdateWindowSurface,因为您已经使用渲染器并且无法将表面与其结合。最后但同样重要的是,至少在窗口事件上进行渲染循环和重绘(或者,更简单,无条件重绘);一次绘画和睡觉不是一种展示事物的方式。 -
在 Linux 上,您的代码可以正常工作,正如@keltar 所写,SDL_GetError 应该会有所帮助。也许是图像文件格式的东西?
-
最小可运行的工作 PNG 示例:stackoverflow.com/questions/4153055/… 可能很容易适应 bmp,因为文档说它受支持:libsdl.org/projects/SDL_image/docs/SDL_image.html