无法将图像加载到SDL2程序

时间:2017-07-24 10:05:49

标签: c++ sdl-2

嘿我打算用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;
}

结果是“图像无法加载” 如果你能找到,请告诉我,我找不到任何错误。 感谢

2 个答案:

答案 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.aSDL2_image.a,可能来自您使用SDL标头下载的存档的libbin目录。如果您获得上述程序调用的结果,您将能够判断这是否是问题。

答案 1 :(得分:0)

在像我这样的某些IDE和操作系统上,你应该使用完整的(绝对)路径,如:

&#34; C://Users/Filomena/Documents/Images/Sprite.png"

C++ IMG_LoadTexture() returns null