簡體   English   中英

SDL 圖像:無法打開圖像

[英]SDL-Image: Couldn't open image

不幸的是,我沒有得到圖片,只有一個白屏。 我目前正在學習 c++ 和 sdl。

錯誤信息:

SDL_image Error: Couldn't open test.jpg

我在 Windows 10 計算機上使用 Visual Studio。

#include <SDL.h>
#include <SDL_image.h>
#include <iostream>
#include <windows.h>
#include <string>

using namespace std;;

string ExePath() {
    char buffer[MAX_PATH];
    GetModuleFileName(NULL, buffer, MAX_PATH);
    string::size_type pos = string(buffer).find_last_of("\\/");
    return string(buffer).substr(0, pos);
}
int main(int argc, char* args[]) {
    cout << "my directory is " << ExePath() << "\n";

if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
    std::cout << "SDL load fail" << std::endl;
    return -1;
}
SDL_Window* window = SDL_CreateWindow("Game", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 500, 500, SDL_WINDOW_SHOWN);
if (window == NULL) {
    std::cout << "Window load fail." << std::endl;
    return -1;
}
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (renderer == NULL) {
    std::cout << "Renderer load fail." << std::endl;
    return -1;
}

SDL_Texture* background = IMG_LoadTexture(renderer, "test.jpg");
if (background == NULL) {
    printf("SDL_image could not initialize! SDL_image Error: %s\n", IMG_GetError());
    SDL_Delay(5000);
    return -1;
}
SDL_Rect pos;
pos.x = 20;
pos.y = 30;
pos.w = 460;
pos.h = 300;

SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, background, NULL, &pos);
SDL_RenderPresent(renderer);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
atexit(SDL_Quit);
return 0;
}

我已經嘗試過絕對路徑。 圖片也在正確的文件夾中。 較小的圖片,jpeg,png。 我不知道。

SDL Image 是一個單獨的庫。 你應該在使用它之前初始化它。 像這樣的東西:

    ////...
    int imgFlags = IMG_INIT_JPG; // or IMG_INIT_PNG; 
    // not sure about the imgFlags parameter, read the docs.
    if( !( IMG_Init( imgFlags ) & imgFlags ) )
    {
        printf("SDL_image could not initialize! SDL_image Error: %s\n", IMG_GetError() );
    }
    /// the rest is the same...
    SDL_Texture* background = IMG_LoadTexture(renderer, "test.jpg");
    if (background == NULL) {
        printf("SDL_image could not initialize! SDL_image Error: %s\n", IMG_GetError());
        SDL_Delay(5000);
        return -1;
    }
    /// ...

一些參考https://discourse.libsdl.org/t/help-with-initializing-sdl-image/23601

編輯:對於“更近一步”:我認為你的延遲是在錯誤的地方。

    SDL_RenderClear(renderer);
    SDL_RenderCopy(renderer, background, NULL, &pos);
    SDL_RenderPresent(renderer);
    SDL_Delay(5000);  //////// For example try putting int here
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    atexit(SDL_Quit);
    std::cout << "Bye!" << std::endl;
    return 0;

暫無
暫無

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

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