IMG_Load不起作用

IMG_Load doesn't work

本文关键字:不起作用 Load IMG      更新时间:2023-10-16

我正在看这个系列= https://www.youtube.com/watch?v=2NVgHrOFneg由于某些原因,视频中的代码可以工作,但对我来说,它编译得很好,但不能加载图像。我真的不知道该怎么办。

#include "SDL.h"
#include <iostream>
#include "SDL_image.h"
SDL_Texture *LoadTexture(std::string filePath, SDL_Renderer *renderTarget) //texture optimization function
{

    SDL_Texture *texture = nullptr;
    SDL_Surface *surface = IMG_Load(filePath.c_str());

    if (surface == NULL)
        std::cout << "Error 1" << std::endl;
    else
    {
        texture = SDL_CreateTextureFromSurface(renderTarget, surface);
        if (texture == NULL)
            std::cout << "Error 2" << std::endl;
    }
    SDL_FreeSurface(surface);
    return texture;
}

int main(int, char *argv[])
{
    const int FPS = 144;
    int frameTime = 0;
    SDL_Window *window = nullptr;
    SDL_Texture *currentImage= nullptr;
    SDL_Renderer *renderTarget = nullptr;
    SDL_Rect playerRect;
    int frameWidth, frameHeight;
    int textureWidth, textureHeight;
    SDL_Init(SDL_INIT_VIDEO );
    int imgFlags = IMG_INIT_PNG | IMG_INIT_JPG;
    if (!(IMG_Init(imgFlags) != imgFlags))
    {
        std::cout << "Error: " << IMG_GetError()    << std::endl;

    }
    window = SDL_CreateWindow("SDL Pong", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1024, 720, SDL_WINDOW_SHOWN);
    renderTarget = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    currentImage = LoadTexture("Untitled.jpg", renderTarget);
    SDL_QueryTexture(currentImage, NULL, NULL, &textureWidth, &textureHeight);
    SDL_SetRenderDrawColor(renderTarget, 0xFF, 0, 0, 0xFF);
    frameWidth = textureWidth / 3;
    frameHeight = textureHeight / 4;
    playerRect.x = playerRect.y = 0;
    playerRect.y = frameWidth;
    playerRect.h = frameHeight;
    bool isRunning = true; //game loop
    SDL_Event ev;
    while (isRunning)
    {
        while (SDL_PollEvent(&ev) != 0)
        {
            if (ev.type == SDL_QUIT)
                isRunning = false;
        }

    frameTime++;
    if (FPS / frameTime == 4)
    {
        frameTime = 0;
        playerRect.x += frameWidth;
        if (playerRect.x >= textureWidth)
            playerRect.x =0;
        }
        SDL_RenderClear(renderTarget);
        SDL_RenderCopy(renderTarget, currentImage, &playerRect, NULL);
        SDL_RenderPresent(renderTarget);
    }
    SDL_DestroyWindow(window);
    SDL_DestroyTexture(currentImage);
    SDL_DestroyRenderer(renderTarget);
    window = nullptr;
    renderTarget = nullptr;
    currentImage  = nullptr;
    SDL_Quit();

    return 0;
}

这是错误信息:https://i.stack.imgur.com/vNvYo.jpg

IMG_Init返回初始化格式的位域。如果结果位域不包含flags中请求的所有格式,则说明有问题。

if (!(IMG_Init(imgFlags) != imgFlags))检查是否有no错误。然后你试图得到错误信息,但是没有错误。删除反运算符

当你创建。exe并在IDE中运行它时,它通常会将可执行文件存储在../bin/.目录中。目录中。如果Untitled.jpg和你的源文件在同一个目录下,它将找不到它。

SDL_GetBasePath ();将返回文件的基本路径。查看文档。

来自SDL_GetBasePath() + "Untitled.jpg"的字符串将找到并打开文件。