首页 > 解决方案 > SDL2 不会显示图像

问题描述

我想使用 SDL2 打开一个窗口并显示一个图像(准确地说是模因)。由于某种原因,图像没有出现;当我运行程序时,只打开一个空白窗口。

这是我的代码:

#include <stdio.h>
#include <SDL2/SDL.h>
#include <time.h>
#include <stdbool.h>
#include "SDL2_image/SDL_image.h"


typedef struct
{
    SDL_Texture *meme1;
    SDL_Window *window;
    SDL_Renderer *renderer;
}Meme;

void load(Meme *meme)
{
    SDL_Surface *surface = NULL;

    surface = IMG_Load("meme1.jpg");
    meme->meme1 = SDL_CreateTextureFromSurface(meme->renderer, surface);
    if(surface == NULL)
    {
        printf("Could not find meme1.jpg\n");
        EXIT_FAILURE;
    }

    if(SDL_CreateTextureFromSurface(meme->renderer, surface) < 0 )
    {
        printf("\n\n\nSDL_CreateTextureFromSurface failed: %s\n\n\n", SDL_GetError());
    }
   SDL_FreeSurface(surface);
}


int process()
{
    int quit = 0;
    SDL_Event quitEvent;
    while(quit==0)
    {
        while(SDL_PollEvent(&quitEvent))
        {
            if(quitEvent.type == SDL_QUIT)
            {
                quit = 1;
            }
        }
    }

    return quit;
}


void doRender(SDL_Renderer *renderer, Meme *meme)
{
    renderer = SDL_CreateRenderer(meme->window, -1, 0);
    SDL_RenderCopy(renderer, meme->meme1, NULL, NULL);
    SDL_RenderPresent(renderer);
}




int main(int argc, char *argv[])
{
    //creates the main window
    SDL_Window *window = NULL;
    Meme meme;
    SDL_Renderer *renderer = NULL;

    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_Init(SDL_INIT_VIDEO);

    window = SDL_CreateWindow("Window",
                              SDL_WINDOWPOS_CENTERED,
                              SDL_WINDOWPOS_CENTERED,
                              800,
                              600,
                              0);
    if (window == NULL)
    {
        printf("\nFailed to create window: %s\n", SDL_GetError());
        return 1;
    }


    load(&meme);

    int done = 0;
    while(!done)
    {
        done = process();

        doRender(renderer, &meme);
    }


    SDL_DestroyWindow(window);
    SDL_DestroyTexture(meme.meme1);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}

标签: cimagesdl

解决方案


错误来自您没有使用函数“IMG_Init (arg)”初始化 SDL_image


推荐阅读