嘿我打算用SDL2将图像加载到我的程序中。我正在使用visual studio 2015.我将图像放在我的项目文件夹中的正确位置,但仍然没有加载图像。我的代码如下
#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;
}
结果是“图像无法加载” 如果你能找到,请告诉我,我找不到任何错误。 感谢
答案 0 :(得分:3)
您引用的错误表明man
为空,这意味着IMG_LoadTexture
返回null。这可能是因为renderer
为空,您应该检查,或者很可能只是因为您的&#34; img.png&#34;无法在SDL_IMG
图书馆找到。
您应首先添加一项检查以确保您的渲染器不为空,然后检查您的程序设置为运行的working directory(假设它是从IDE运行的)。 &#34; img.png&#34;文件需要在该目录中。将工作目录更改为编译二进制文件所在的同一目录通常最容易,因此您的程序和数据都在同一个位置。
您可以调用IMG_GetError
(或SDL_GetError
)来获取描述错误的字符串 - 如果SDL程序中的某些内容开始起作用,这应该是您的第一个调用端口。
编辑:另一件可能出错的事情是SDL链接库与二进制文件不在同一个文件夹中(尽管这更容易崩溃)。你需要例如。 SDL2.a
,SDL2_image.a
,可能来自您使用SDL标头下载的存档的lib
或bin
目录。如果您获得上述程序调用的结果,您将能够判断这是否是问题。
答案 1 :(得分:0)
在像我这样的某些IDE和操作系统上,你应该使用完整的(绝对)路径,如:
&#34; C://Users/Filomena/Documents/Images/Sprite.png"