无法将映像加载到 SDL2 程序

Unable to to load an image to SDL2 program

本文关键字:SDL2 程序 加载 映像      更新时间:2023-10-16

嘿,我打算用SDL2将图像加载到我的程序中。我正在使用Visual Studio 2015。我将图像放在我的项目文件夹中的正确位置,但图像仍然没有 loaded.my 代码,如下所示

#include <iostream>
#include <SDL_image.h>
#include <SDL.h>
using namespace std;
int main(int argc, char* argv[]) {
SDL_Init(SDL_INIT_VIDEO);
SDL_Window* window = NULL;
window = SDL_CreateWindow("Game", 100, 100, 700, 400, SDL_WINDOW_SHOWN);
if (window = NULL) {
cout << "Window creation error" << endl;
}
SDL_Renderer* renderer = NULL;
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
SDL_Texture* man = IMG_LoadTexture(renderer, "img.png");
SDL_Event* ev = new SDL_Event();
if (man == NULL) {
cout << "image cannot load" << endl;
}
SDL_Rect boy_rect;
boy_rect.x = 10;
boy_rect.y = 10;
boy_rect.h = 220;
boy_rect.w = 300;
while (ev->type != SDL_QUIT) {
SDL_PollEvent(ev);
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, man, NULL, &boy_rect);
SDL_RenderPresent(renderer);
}
SDL_DestroyTexture(man);
SDL_DestroyWindow(window);
SDL_DestroyRenderer(renderer);
return 0;
}

结果是"图像无法加载" 如果您能找到,我找不到任何错误,请通知我。 谢谢

您引用的错误表明man为空,这意味着IMG_LoadTexture返回空。这可能是因为renderer是空的,你应该检查一下,或者很可能只是因为你的"img.png"无法被SDL_IMG库找到。

应首先添加检查以确保呈现器不为 null,然后检查程序设置为从中运行的工作目录(假设它从 IDE 运行(。"img.png"文件需要位于该目录中。通常最简单的方法是将工作目录更改为编译的二进制文件所在的同一目录,以便程序和数据都位于同一位置。

您可以调用IMG_GetError(或SDL_GetError(来获取描述错误的字符串 - 如果 SDL 程序中的某些内容开始运行,这应该是您的第一个呼叫端口。

编辑:可能出错的另一件事是SDL链接库与您的二进制文件不在同一文件夹中(尽管这更有可能崩溃(。你需要例如。SDL2.aSDL2_image.a,可能来自您使用 SDL 标头下载的存档的libbin目录。如果得到上述过程调用的结果,您将能够判断这是否是问题所在。

在一些像我这样的 IDE 和操作系统上,您应该使用完整(绝对(路径,如下所示:

"C://Users/Filomena/Documents/Images/Sprite.png">

C++ IMG_LoadTexture(( 返回空

经过两个小时的调试,事实证明渲染器为空。 在我的代码中,我请求了窗口的表面,并将其传递给渲染器,这在以前很好,但现在在 2.28.1 版本中似乎无法初始化渲染器。 因此,在删除对SDL_GetWindowSurface的调用后,一切都奏效了。不需要该调用,因为我们现在正在使用渲染器。 带走:在所有地方都使用 SDL_GetError((。