簡體   English   中英

SDL_image無法使用IMG_LoadTexture()加載.png文件

[英]SDL_image Can't load .png file with IMG_LoadTexture()

嘗試使用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})

您正在從應用程序的當前工作目錄(CWD)加載映像。 這似乎不一定與您的可執行文件所在的目錄相同(取決於它的啟動方式)。

3種簡單的修復方法:

  1. 在運行時將cwd更改為文件所在的位置,然后像現在一樣加載。
  2. 加載時提供文件的絕對路徑,因此cwd無關緊要。
  3. 在運行時獲取可執行文件的路徑,然后構造相對於可執行文件所在位置的文件路徑。 (我認為這是最好的選擇,因為它在將您的項目移至其他位置/將其安裝到其他位置方面非常可靠)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM