c - SDL2不显示图像

标签 c image sdl

我想使用 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;
}

最佳答案

您应该尝试将 meme 转换为 bmp 图像并使用函数 SDL_LoadBmp (使用表面来使用此功能) 如果您需要更多帮助或需要详细信息,请检查语法: https://wiki.libsdl.org/SDL_LoadBMP

关于c - SDL2不显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56099236/

相关文章:

c - C中的过滤字符串

c - Linux futex 系统调用虚假唤醒,返回值为 0?

C : Unidentified if evaluation issue

image - 如何在黑莓中裁剪具有特定形状的图像?

opengl - SDL 三重缓冲

ios - PjSip 添加多个 header

image - 如何在图像中找到条形码的位置

javascript - 如何将具有 z 索引的 <img> 居中?

opengl - 查看玩家正在看什么 "block"

sdl - 如何禁用SDL2中的按键重复?