SDL_image无法使用IMG_LoadTexture()

时间:2018-11-28 16:40:58

标签: c++ linux sdl clion sdl-image

在尝试使用IMG_LoadTexture(renderer,“ idle.png”)加载.png文件时 SDL_GetError()说:“无法打开idle.png” 没有编译器错误,仅出现一个黑色窗口。

这是我的main.cpp

#include <stdlib.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <iostream>

int main(int argc,  char** argv) {
    SDL_Event event;
    SDL_Renderer *renderer = NULL;
    SDL_Texture *texture = NULL;
    SDL_Window *window = NULL;

    SDL_Init(SDL_INIT_TIMER | SDL_INIT_VIDEO);
    SDL_CreateWindowAndRenderer(
            800, 600,
            0, &window, &renderer
    );
    IMG_Init(IMG_INIT_PNG);
    texture = IMG_LoadTexture(renderer, "idle.png");
    std::cout << SDL_GetError();

    while (1) {
        SDL_RenderCopy(renderer, texture, NULL, NULL);
        SDL_RenderPresent(renderer);
        if (SDL_PollEvent(&event) && event.type == SDL_QUIT)
            break;
    }
    SDL_DestroyTexture(texture);
    IMG_Quit();
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();
    return EXIT_SUCCESS;
}

但是我想问题是我链接库的方式。我安装了sdl2,sdl2_image和libpng。

CMakeLists.txt:

cmake_minimum_required(VERSION 3.12)
project(untitled)

set(CMAKE_CXX_STANDARD 17)

add_executable(untitled main.cpp)

INCLUDE(FindPkgConfig)

PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
PKG_SEARCH_MODULE(SDL2IMAGE REQUIRED SDL2_image>=2.0.0)

INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIRS} ${SDL2IMAGE_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(untitled ${SDL2_LIBRARIES} ${SDL2IMAGE_LIBRARIES})

1 个答案:

答案 0 :(得分:2)

您正在从应用程序的当前工作目录(CWD)加载图像。似乎与您的可执行文件所在的目录不一定相同(取决于启动方式)。

3种简单的修复方法:

  1. 在运行时将cwd更改为文件所在的位置,然后像现在一样加载。
  2. 在加载时提供文件的绝对路径,因此cwd无关紧要。
  3. 在运行时获取可执行文件的路径,然后构造相对于可执行文件所在位置的文件路径。 (我认为,这是最好的选择,因为它对于将您的项目移动/安装到其他位置非常有效)。